{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 推荐系统\n",
    "\n",
    "首先对音乐数据集进行数据清洗和特征提取，基于矩阵分解方式来进行音乐推荐。\n",
    "\n",
    "- 音乐数据处理\n",
    "\n",
    "读取音乐数据集，并统计其各项指标，选择有价值的信息当做我们的特征\n",
    "\n",
    "- 基于商品相似性的推荐 \n",
    "\n",
    "选择相似度计算方法，通过相似度来计算推荐结果\n",
    "\n",
    "- 基于SVD矩阵分解的推荐\n",
    "\n",
    "使用矩阵分解方法，快速高效得到推荐结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:34:54.624167Z",
     "start_time": "2017-09-26T05:34:46.420964Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import time\n",
    "import sqlite3\n",
    "\n",
    "data_home = './'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们的数据中有一部分是数据库文件，使用sqlite3工具包来帮助我们进行数据的读取，关于数据的路径这个大家可以根据自己情况来设置。\n",
    "先来看一下我们的数据长什么样子吧，对于不同格式的数据read_csv有很多参数可以来选择，例如分隔符与列名："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据读取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在数据中只需要用户，歌曲，播放量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T09:48:06.127761Z",
     "start_time": "2017-09-24T09:48:05.969929Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset = pd.read_csv(filepath_or_buffer=data_home+'train_triplets.txt', \n",
    "                              sep='\\t', header=None, \n",
    "                              names=['user','song','play_count'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据规模还是蛮大的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(48373586, 3)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据占用内存与各指标格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 48373586 entries, 0 to 48373585\n",
      "Data columns (total 3 columns):\n",
      "user          object\n",
      "song          object\n",
      "play_count    int64\n",
      "dtypes: int64(1), object(2)\n",
      "memory usage: 1.1+ GB\n"
     ]
    }
   ],
   "source": [
    "triplet_dataset.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果想更详细的了解数据的情况，可以打印其info信息，来观察不同列的类型以及整体占用内存，这里教大家一个比较实用的技巧，如果拿到的数据非常大，对数据进行处理的时候可能会出现内存溢出的错误，这里最简单的方法就是设置下数据个格式，比如将float64用float32来替代，这样可以大大节省内存开销。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "原始数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T09:48:29.300568Z",
     "start_time": "2017-09-24T09:48:29.275986Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAKIMP12A8C130995</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOAPDEY12A81C210A9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBBMDR12A8C13253B</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFNSP12AF72A0E22</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBFOVM12A58A7D494</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBNZDC12A6D4FC103</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBSUJE12A6D4F8CF5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBVFZR12A6D4F8AE3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBXALG12A8C13C108</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>b80344d063b5ccb3212f76538f3d9e43d87dca9e</td>\n",
       "      <td>SOBXHDL12A81C204C0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  play_count\n",
       "0  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAKIMP12A8C130995           1\n",
       "1  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOAPDEY12A81C210A9           1\n",
       "2  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBBMDR12A8C13253B           2\n",
       "3  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFNSP12AF72A0E22           1\n",
       "4  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBFOVM12A58A7D494           1\n",
       "5  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBNZDC12A6D4FC103           1\n",
       "6  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBSUJE12A6D4F8CF5           2\n",
       "7  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBVFZR12A6D4F8AE3           1\n",
       "8  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBXALG12A8C13C108           1\n",
       "9  b80344d063b5ccb3212f76538f3d9e43d87dca9e  SOBXHDL12A81C204C0           1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset.head(n=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对每一个用户，分别统计他的播放总量\n",
    "\n",
    "数据中有用户的编号，歌曲编号，已经用户对该歌曲播放的次数。\n",
    "有了基础数据之后，我们还可以统计出关于用户与歌曲的各项指标，例如对每一个用户，分别统计他的播放总量，代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:00:40.238849Z",
     "start_time": "2017-09-24T09:57:54.875213Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "output_dict = {}\n",
    "with open(data_home+'train_triplets.txt') as f:\n",
    "    for line_number, line in enumerate(f):\n",
    "        #找到当前的用户\n",
    "        user = line.split('\\t')[0]\n",
    "        #得到其播放量数据\n",
    "        play_count = int(line.split('\\t')[2])\n",
    "        #如果字典中已经有该用户信息，在其基础上增加当前的播放量\n",
    "        if user in output_dict:\n",
    "            play_count +=output_dict[user]\n",
    "            output_dict.update({user:play_count})\n",
    "        output_dict.update({user:play_count})\n",
    "# 统计 用户-总播放量\n",
    "output_list = [{'user':k,'play_count':v} for k,v in output_dict.items()]\n",
    "#转换成DF格式\n",
    "play_count_df = pd.DataFrame(output_list)\n",
    "#排序\n",
    "play_count_df = play_count_df.sort_values(by = 'play_count', ascending = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "构建一个字典结构来统计不同用户分别播放的总数，这需要我们把数据集遍历一遍。当我们的数据集比较庞大的时候，每一步操作都可能花费较长时间，后续操作中如果稍有不慎可能还得重头再来一遍，这就得不偿失了，最好还是把中间结果保存下来，既然我们已经把结果转换成df格式，直接使用to_csv()函数就可以完成保存的操作。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "play_count_df.to_csv(path_or_buf='user_playcount_df.csv', index = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对于每一首歌，分别统计它的播放总量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:08:50.652416Z",
     "start_time": "2017-09-24T10:05:53.721519Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#统计方法跟上述类似\n",
    "output_dict = {}\n",
    "with open(data_home+'train_triplets.txt') as f:\n",
    "    for line_number, line in enumerate(f):\n",
    "        #找到当前歌曲\n",
    "        song = line.split('\\t')[1]\n",
    "        #找到当前播放次数\n",
    "        play_count = int(line.split('\\t')[2])\n",
    "        #统计每首歌曲被播放的总次数\n",
    "        if song in output_dict:\n",
    "            play_count +=output_dict[song]\n",
    "            output_dict.update({song:play_count})\n",
    "        output_dict.update({song:play_count})\n",
    "output_list = [{'song':k,'play_count':v} for k,v in output_dict.items()]\n",
    "#转换成df格式\n",
    "song_count_df = pd.DataFrame(output_list)\n",
    "song_count_df = song_count_df.sort_values(by = 'play_count', ascending = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "song_count_df.to_csv(path_or_buf='song_playcount_df.csv', index = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 看看目前的排行情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:08:54.987662Z",
     "start_time": "2017-09-24T10:08:53.518248Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>play_count</th>\n",
       "      <th>user</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>13132</td>\n",
       "      <td>093cb74eb3c517c5179ae24caf0ebec51b24d2a2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9884</td>\n",
       "      <td>119b7c88d58d0c6eb051365c103da5caf817bea6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8210</td>\n",
       "      <td>3fa44653315697f42410a30cb766a4eb102080bb</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7015</td>\n",
       "      <td>a2679496cd0af9779a92a13ff7c6af5c81ea8c7b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6494</td>\n",
       "      <td>d7d2d888ae04d16e994d6964214a1de81392ee04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6472</td>\n",
       "      <td>4ae01afa8f2430ea0704d502bc7b57fb52164882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6150</td>\n",
       "      <td>b7c24f770be6b802805ac0e2106624a517643c17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>5656</td>\n",
       "      <td>113255a012b2affeab62607563d03fbdf31b08e7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>5620</td>\n",
       "      <td>6d625c6557df84b60d90426c0116138b617b9449</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5602</td>\n",
       "      <td>99ac3d883681e21ea68071019dba828ce76fe94d</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   play_count                                      user\n",
       "0       13132  093cb74eb3c517c5179ae24caf0ebec51b24d2a2\n",
       "1        9884  119b7c88d58d0c6eb051365c103da5caf817bea6\n",
       "2        8210  3fa44653315697f42410a30cb766a4eb102080bb\n",
       "3        7015  a2679496cd0af9779a92a13ff7c6af5c81ea8c7b\n",
       "4        6494  d7d2d888ae04d16e994d6964214a1de81392ee04\n",
       "5        6472  4ae01afa8f2430ea0704d502bc7b57fb52164882\n",
       "6        6150  b7c24f770be6b802805ac0e2106624a517643c17\n",
       "7        5656  113255a012b2affeab62607563d03fbdf31b08e7\n",
       "8        5620  6d625c6557df84b60d90426c0116138b617b9449\n",
       "9        5602  99ac3d883681e21ea68071019dba828ce76fe94d"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "play_count_df = pd.read_csv(filepath_or_buffer='user_playcount_df.csv')\n",
    "play_count_df.head(n =10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:09:06.800300Z",
     "start_time": "2017-09-24T10:09:06.427869Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>play_count</th>\n",
       "      <th>song</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>726885</td>\n",
       "      <td>SOBONKR12A58A7A7E0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>648239</td>\n",
       "      <td>SOAUWYT12A81C206F1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>527893</td>\n",
       "      <td>SOSXLTC12AF72A7F54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>425463</td>\n",
       "      <td>SOFRQTD12A81C233C0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>389880</td>\n",
       "      <td>SOEGIYH12A6D4FC0E3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>356533</td>\n",
       "      <td>SOAXGDH12A8C13F8A1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>292642</td>\n",
       "      <td>SONYKOW12AB01849C9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>274627</td>\n",
       "      <td>SOPUCYA12A8C13A694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>268353</td>\n",
       "      <td>SOUFTBI12AB0183F65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>244730</td>\n",
       "      <td>SOVDSJC12A58A7A271</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   play_count                song\n",
       "0      726885  SOBONKR12A58A7A7E0\n",
       "1      648239  SOAUWYT12A81C206F1\n",
       "2      527893  SOSXLTC12AF72A7F54\n",
       "3      425463  SOFRQTD12A81C233C0\n",
       "4      389880  SOEGIYH12A6D4FC0E3\n",
       "5      356533  SOAXGDH12A8C13F8A1\n",
       "6      292642  SONYKOW12AB01849C9\n",
       "7      274627  SOPUCYA12A8C13A694\n",
       "8      268353  SOUFTBI12AB0183F65\n",
       "9      244730  SOVDSJC12A58A7A271"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "song_count_df = pd.read_csv(filepath_or_buffer='song_playcount_df.csv')\n",
    "song_count_df.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最受欢迎的一首歌曲有726885次播放。\n",
    "刚才大家也看到了，这个音乐数据量集十分庞大，考虑到执行过程的时间消耗以及矩阵稀疏性问题，我们依据播放量指标对数据集进行了截取。因为有些注册用户可能只是关注了一下之后就不再登录平台，这些用户对我们建模不会起促进作用，反而增大了矩阵的稀疏性。对于歌曲也是同理，可能有些歌曲根本无人问津。由于之前已经对用户与歌曲播放情况进行了排序，所以我们分别选择了其中的10W名用户和3W首歌曲，关于截取的合适比例大家也可以通过观察选择数据的播放量占总体的比例来设置。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 取其中一部分数（按大小排好序的了，这些应该是比较重要的数据），作为我们的实验数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:16:05.763243Z",
     "start_time": "2017-09-24T10:16:05.700186Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40.8807280501\n"
     ]
    }
   ],
   "source": [
    "#10W名用户的播放量占总体的比例\n",
    "total_play_count = sum(song_count_df.play_count)\n",
    "print ((float(play_count_df.head(n=100000).play_count.sum())/total_play_count)*100)\n",
    "play_count_subset = play_count_df.head(n=100000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:26:37.537061Z",
     "start_time": "2017-09-24T10:26:37.528055Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "78.39315366645269"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(float(song_count_df.head(n=30000).play_count.sum())/total_play_count)*100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:26:38.311410Z",
     "start_time": "2017-09-24T10:26:38.306426Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "song_count_subset = song_count_df.head(n=30000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "前3W首歌的播放量占到了总体的78.39%\n",
    "现在已经有了这10W名忠实用户和3W首经典歌曲，接下来我们就要对原始数据集进行过滤清洗，说白了就是在原始数据集中剔除掉不包含这些用户以及歌曲的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "取10W个用户，3W首歌"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:26:39.337554Z",
     "start_time": "2017-09-24T10:26:39.326529Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "user_subset = list(play_count_subset.user)\n",
    "song_subset = list(song_count_subset.song)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "过滤掉其他用户数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:30:23.563673Z",
     "start_time": "2017-09-24T10:27:22.711377Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#读取原始数据集\n",
    "triplet_dataset = pd.read_csv(filepath_or_buffer=data_home+'train_triplets.txt',sep='\\t', \n",
    "                              header=None, names=['user','song','play_count'])\n",
    "#只保留有这10W名用户的数据，其余过滤掉\n",
    "triplet_dataset_sub = triplet_dataset[triplet_dataset.user.isin(user_subset) ]\n",
    "del(triplet_dataset)\n",
    "#只保留有这3W首歌曲的数据，其余也过滤掉\n",
    "triplet_dataset_sub_song = triplet_dataset_sub[triplet_dataset_sub.song.isin(song_subset)]\n",
    "del(triplet_dataset_sub)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song.to_csv(path_or_buf=data_home+'triplet_dataset_sub_song.csv', index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当前我们的数据量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:32:35.248710Z",
     "start_time": "2017-09-24T10:32:35.241709Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10774558, 3)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据样本个数此时只有原来的1/4不到，但是我们过滤掉的样本都是稀疏数据不利于建模，所以当拿到了数据之后对数据进行清洗和预处理工作还是非常有必要的，不单单提升计算的速度，还会影响最终的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T10:33:25.958644Z",
     "start_time": "2017-09-24T10:33:25.939631Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>498</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>499</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>500</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>501</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>502</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>503</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBONKR12A58A7A7E0</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>504</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBZZDU12A6310D8A3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>505</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOCAHRT12A8C13A1A4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>506</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SODASIJ12A6D4F5D89</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>507</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SODEAWL12AB0187032</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                         user                song  play_count\n",
       "498  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82          12\n",
       "499  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D           1\n",
       "500  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239           1\n",
       "501  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50           1\n",
       "502  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36           7\n",
       "503  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBONKR12A58A7A7E0          26\n",
       "504  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBZZDU12A6310D8A3           7\n",
       "505  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOCAHRT12A8C13A1A4           5\n",
       "506  d6589314c0a9bcbca4fee0c93b14bc402363afea  SODASIJ12A6D4F5D89           1\n",
       "507  d6589314c0a9bcbca4fee0c93b14bc402363afea  SODEAWL12AB0187032           8"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song.head(n=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 加入音乐详细信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们目前拿到的数据只有播放次数，可利用的信息实在太少了，对每首歌来说正常情况都应该有一份详细信息，例如歌手，发布时间，主题等，这些信息都存在一份数据库格式文件中，接下来我们就通过sqlite工具包来读取这些数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T13:48:12.545636Z",
     "start_time": "2017-09-24T13:48:12.536631Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('songs',)]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "conn = sqlite3.connect(data_home+'track_metadata.db')\n",
    "cur = conn.cursor()\n",
    "cur.execute(\"SELECT name FROM sqlite_master WHERE type='table'\")\n",
    "cur.fetchall()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "track_metadata_df = pd.read_sql(con=conn, sql='select * from songs')\n",
    "track_metadata_df_sub = track_metadata_df[track_metadata_df.song_id.isin(song_subset)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:00:17.841834Z",
     "start_time": "2017-09-24T14:00:17.450258Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "track_metadata_df_sub.to_csv(path_or_buf=data_home+'track_metadata_df_sub.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:00:26.155770Z",
     "start_time": "2017-09-24T14:00:26.149763Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(30447, 14)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "track_metadata_df_sub.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 我们现有的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:35:13.855787Z",
     "start_time": "2017-09-26T05:35:00.267829Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song = pd.read_csv(filepath_or_buffer=data_home+'triplet_dataset_sub_song.csv',encoding = \"ISO-8859-1\")\n",
    "track_metadata_df_sub = pd.read_csv(filepath_or_buffer=data_home+'track_metadata_df_sub.csv',encoding = \"ISO-8859-1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  play_count\n",
       "0  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82          12\n",
       "1  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D           1\n",
       "2  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239           1\n",
       "3  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50           1\n",
       "4  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36           7"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>track_id</th>\n",
       "      <th>title</th>\n",
       "      <th>song_id</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_id</th>\n",
       "      <th>artist_mbid</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>duration</th>\n",
       "      <th>artist_familiarity</th>\n",
       "      <th>artist_hotttnesss</th>\n",
       "      <th>year</th>\n",
       "      <th>track_7digitalid</th>\n",
       "      <th>shs_perf</th>\n",
       "      <th>shs_work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>TRMMGCB128E079651D</td>\n",
       "      <td>Get Along (Feat: Pace Won) (Instrumental)</td>\n",
       "      <td>SOHNWIM12A67ADF7D9</td>\n",
       "      <td>Charango</td>\n",
       "      <td>ARU3C671187FB3F71B</td>\n",
       "      <td>067102ea-9519-4622-9077-57ca4164cfbb</td>\n",
       "      <td>Morcheeba</td>\n",
       "      <td>227.47383</td>\n",
       "      <td>0.819087</td>\n",
       "      <td>0.533117</td>\n",
       "      <td>2002</td>\n",
       "      <td>185967</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>TRMMGTX128F92FB4D9</td>\n",
       "      <td>Viejo</td>\n",
       "      <td>SOECFIW12A8C144546</td>\n",
       "      <td>Caraluna</td>\n",
       "      <td>ARPAAPH1187FB3601B</td>\n",
       "      <td>f69d655c-ffd6-4bee-8c2a-3086b2be2fc6</td>\n",
       "      <td>Bacilos</td>\n",
       "      <td>307.51302</td>\n",
       "      <td>0.595554</td>\n",
       "      <td>0.400705</td>\n",
       "      <td>0</td>\n",
       "      <td>6825058</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>TRMMGDP128F933E59A</td>\n",
       "      <td>I Say A Little Prayer</td>\n",
       "      <td>SOGWEOB12AB018A4D0</td>\n",
       "      <td>The Legendary Hi Records Albums_ Volume 3: Ful...</td>\n",
       "      <td>ARNNRN31187B9AE7B7</td>\n",
       "      <td>fb7272ba-f130-4f0a-934d-6eeea4c18c9a</td>\n",
       "      <td>Al Green</td>\n",
       "      <td>133.58975</td>\n",
       "      <td>0.779490</td>\n",
       "      <td>0.599210</td>\n",
       "      <td>1978</td>\n",
       "      <td>5211723</td>\n",
       "      <td>-1</td>\n",
       "      <td>11898</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>TRMMHBF12903CF6E59</td>\n",
       "      <td>At the Ball_ That's All</td>\n",
       "      <td>SOJGCRL12A8C144187</td>\n",
       "      <td>Best of Laurel &amp; Hardy - The Lonesome Pine</td>\n",
       "      <td>AR1FEUF1187B9AF3E3</td>\n",
       "      <td>4a8ae4fd-ad6f-4912-851f-093f12ee3572</td>\n",
       "      <td>Laurel &amp; Hardy</td>\n",
       "      <td>123.71546</td>\n",
       "      <td>0.438709</td>\n",
       "      <td>0.307120</td>\n",
       "      <td>0</td>\n",
       "      <td>8645877</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>TRMMHKG12903CDB1B5</td>\n",
       "      <td>Black Gold</td>\n",
       "      <td>SOHNFBA12AB018CD1D</td>\n",
       "      <td>Total Life Forever</td>\n",
       "      <td>ARVXV1J1187FB5BF88</td>\n",
       "      <td>6a65d878-fcd0-42cf-aff9-ca1d636a8bcc</td>\n",
       "      <td>Foals</td>\n",
       "      <td>386.32444</td>\n",
       "      <td>0.842578</td>\n",
       "      <td>0.514523</td>\n",
       "      <td>2010</td>\n",
       "      <td>9007438</td>\n",
       "      <td>-1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             track_id                                      title  \\\n",
       "0  TRMMGCB128E079651D  Get Along (Feat: Pace Won) (Instrumental)   \n",
       "1  TRMMGTX128F92FB4D9                                      Viejo   \n",
       "2  TRMMGDP128F933E59A                      I Say A Little Prayer   \n",
       "3  TRMMHBF12903CF6E59                    At the Ball_ That's All   \n",
       "4  TRMMHKG12903CDB1B5                                 Black Gold   \n",
       "\n",
       "              song_id                                            release  \\\n",
       "0  SOHNWIM12A67ADF7D9                                           Charango   \n",
       "1  SOECFIW12A8C144546                                           Caraluna   \n",
       "2  SOGWEOB12AB018A4D0  The Legendary Hi Records Albums_ Volume 3: Ful...   \n",
       "3  SOJGCRL12A8C144187         Best of Laurel & Hardy - The Lonesome Pine   \n",
       "4  SOHNFBA12AB018CD1D                                 Total Life Forever   \n",
       "\n",
       "            artist_id                           artist_mbid     artist_name  \\\n",
       "0  ARU3C671187FB3F71B  067102ea-9519-4622-9077-57ca4164cfbb       Morcheeba   \n",
       "1  ARPAAPH1187FB3601B  f69d655c-ffd6-4bee-8c2a-3086b2be2fc6         Bacilos   \n",
       "2  ARNNRN31187B9AE7B7  fb7272ba-f130-4f0a-934d-6eeea4c18c9a        Al Green   \n",
       "3  AR1FEUF1187B9AF3E3  4a8ae4fd-ad6f-4912-851f-093f12ee3572  Laurel & Hardy   \n",
       "4  ARVXV1J1187FB5BF88  6a65d878-fcd0-42cf-aff9-ca1d636a8bcc           Foals   \n",
       "\n",
       "    duration  artist_familiarity  artist_hotttnesss  year  track_7digitalid  \\\n",
       "0  227.47383            0.819087           0.533117  2002            185967   \n",
       "1  307.51302            0.595554           0.400705     0           6825058   \n",
       "2  133.58975            0.779490           0.599210  1978           5211723   \n",
       "3  123.71546            0.438709           0.307120     0           8645877   \n",
       "4  386.32444            0.842578           0.514523  2010           9007438   \n",
       "\n",
       "   shs_perf  shs_work  \n",
       "0        -1         0  \n",
       "1        -1         0  \n",
       "2        -1     11898  \n",
       "3        -1         0  \n",
       "4        -1         0  "
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "track_metadata_df_sub.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 清洗数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "去除掉无用的和重复的，数据清洗是很重要的一步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:35:26.643464Z",
     "start_time": "2017-09-26T05:35:14.956760Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 去掉无用的信息\n",
    "del(track_metadata_df_sub['track_id'])\n",
    "del(track_metadata_df_sub['artist_mbid'])\n",
    "# 去掉重复的\n",
    "track_metadata_df_sub = track_metadata_df_sub.drop_duplicates(['song_id'])\n",
    "# 将这份音乐信息数据和我们之前的播放数据整合到一起\n",
    "triplet_dataset_sub_song_merged = pd.merge(triplet_dataset_sub_song, track_metadata_df_sub, how='left', left_on='song', right_on='song_id')\n",
    "# 可以自己改变列名\n",
    "triplet_dataset_sub_song_merged.rename(columns={'play_count':'listen_count'},inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:35:31.415206Z",
     "start_time": "2017-09-26T05:35:29.271749Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 去掉不需要的指标\n",
    "del(triplet_dataset_sub_song_merged['song_id'])\n",
    "del(triplet_dataset_sub_song_merged['artist_id'])\n",
    "del(triplet_dataset_sub_song_merged['duration'])\n",
    "del(triplet_dataset_sub_song_merged['artist_familiarity'])\n",
    "del(triplet_dataset_sub_song_merged['artist_hotttnesss'])\n",
    "del(triplet_dataset_sub_song_merged['track_7digitalid'])\n",
    "del(triplet_dataset_sub_song_merged['shs_perf'])\n",
    "del(triplet_dataset_sub_song_merged['shs_work'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "搞定数据，来看看它长什么样子吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:01:44.587532Z",
     "start_time": "2017-09-24T14:01:44.561014Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "      <td>You And Me Jesus</td>\n",
       "      <td>Tribute To Jake Hess</td>\n",
       "      <td>Jake Hess</td>\n",
       "      <td>2004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "      <td>Harder Better Faster Stronger</td>\n",
       "      <td>Discovery</td>\n",
       "      <td>Daft Punk</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Muse</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "      <td>Breakfast At Tiffany's</td>\n",
       "      <td>Home</td>\n",
       "      <td>Deep Blue Something</td>\n",
       "      <td>1993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "      <td>Lucky (Album Version)</td>\n",
       "      <td>We Sing.  We Dance.  We Steal Things.</td>\n",
       "      <td>Jason Mraz &amp; Colbie Caillat</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBONKR12A58A7A7E0</td>\n",
       "      <td>26</td>\n",
       "      <td>You're The One</td>\n",
       "      <td>If There Was A Way</td>\n",
       "      <td>Dwight Yoakam</td>\n",
       "      <td>1990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBZZDU12A6310D8A3</td>\n",
       "      <td>7</td>\n",
       "      <td>Don't Dream It's Over</td>\n",
       "      <td>Recurring Dream_ Best Of Crowded House (Domest...</td>\n",
       "      <td>Crowded House</td>\n",
       "      <td>1986</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOCAHRT12A8C13A1A4</td>\n",
       "      <td>5</td>\n",
       "      <td>S.O.S.</td>\n",
       "      <td>SOS</td>\n",
       "      <td>Jonas Brothers</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SODASIJ12A6D4F5D89</td>\n",
       "      <td>1</td>\n",
       "      <td>The Invisible Man</td>\n",
       "      <td>The Invisible Man</td>\n",
       "      <td>Michael Cretu</td>\n",
       "      <td>1985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SODEAWL12AB0187032</td>\n",
       "      <td>8</td>\n",
       "      <td>American Idiot [feat. Green Day &amp; The Cast Of ...</td>\n",
       "      <td>The Original Broadway Cast Recording 'American...</td>\n",
       "      <td>Green Day</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82            12   \n",
       "1  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D             1   \n",
       "2  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239             1   \n",
       "3  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50             1   \n",
       "4  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36             7   \n",
       "5  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBONKR12A58A7A7E0            26   \n",
       "6  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBZZDU12A6310D8A3             7   \n",
       "7  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOCAHRT12A8C13A1A4             5   \n",
       "8  d6589314c0a9bcbca4fee0c93b14bc402363afea  SODASIJ12A6D4F5D89             1   \n",
       "9  d6589314c0a9bcbca4fee0c93b14bc402363afea  SODEAWL12AB0187032             8   \n",
       "\n",
       "                                               title  \\\n",
       "0                                   You And Me Jesus   \n",
       "1                      Harder Better Faster Stronger   \n",
       "2                                           Uprising   \n",
       "3                             Breakfast At Tiffany's   \n",
       "4                              Lucky (Album Version)   \n",
       "5                                     You're The One   \n",
       "6                              Don't Dream It's Over   \n",
       "7                                             S.O.S.   \n",
       "8                                  The Invisible Man   \n",
       "9  American Idiot [feat. Green Day & The Cast Of ...   \n",
       "\n",
       "                                             release  \\\n",
       "0                               Tribute To Jake Hess   \n",
       "1                                          Discovery   \n",
       "2                                           Uprising   \n",
       "3                                               Home   \n",
       "4              We Sing.  We Dance.  We Steal Things.   \n",
       "5                                 If There Was A Way   \n",
       "6  Recurring Dream_ Best Of Crowded House (Domest...   \n",
       "7                                                SOS   \n",
       "8                                  The Invisible Man   \n",
       "9  The Original Broadway Cast Recording 'American...   \n",
       "\n",
       "                   artist_name  year  \n",
       "0                    Jake Hess  2004  \n",
       "1                    Daft Punk  2007  \n",
       "2                         Muse     0  \n",
       "3          Deep Blue Something  1993  \n",
       "4  Jason Mraz & Colbie Caillat     0  \n",
       "5                Dwight Yoakam  1990  \n",
       "6                Crowded House  1986  \n",
       "7               Jonas Brothers  2007  \n",
       "8                Michael Cretu  1985  \n",
       "9                    Green Day     0  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged.head(n=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在的数据看起来工整多了，不光有用户对某个音乐作品的播放量，还有该音乐作品的名字和发布专辑，以及作者名字和发布时间。\n",
    "现在我们只是大体了解了数据中各个指标的含义，对其具体内容还没有加以分析，我们在之前介绍推荐系统的时候提到过冷启动问题，就是一个新用户来了不知道给他推荐什么好，这时候就可以利用排行榜单了。可以统计最受欢迎的歌曲和歌手是哪些："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 展示最流行的歌曲"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAN7CAYAAAB264/OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XlcVHX7//H3KDIgwggqIIqGpqZp\nVuptmAXehlsuZaZmkZhZfs1caLkzW9Bccsm0LO1u0Ra3u0yzb90KlZoLuOVemZVbKeGCoKag8Pn9\n4ZfzcwQVZE6IvZ6Px3nknHPNNdcMCu8+58zgMMYYAQAAwKPKlPQAAAAAVyNCFgAAgA0IWQAAADYg\nZAEAANiAkAUAAGADQhYAAIANCFkAAAA2IGQBAADYgJAFAABgA0IWAMvMmTPlcDjkcDi0bNmyfMeN\nMbr22mvlcDgUHR1tywz79+9XQkKCNm3aZEv/kpL32u7evbukRwHwFyFkAcjH399f7777br79y5cv\n1y+//CJ/f3/bHnv//v0aMWLEVReyAPz9ELIA5NOjRw/Nnz9fmZmZbvvfffddRUZGqkaNGiU0GfL8\n+eefJT0CgEsgZAHI57777pMkzZkzx9qXkZGh+fPn66GHHirwPkeOHNGAAQNUrVo1eXt7q1atWho+\nfLiysrLc6j7++GM1b95cLpdL5cuXV61atayey5YtU7NmzSRJffr0sU5dJiQkXHDWvNNwSUlJ6tOn\nj4KCguTn56dOnTrp119/zVf/3nvvqXHjxvLx8VFQUJDuvvtu/fDDD241cXFxqlChgrZv367WrVvL\nz89PVapU0cCBA93Cze7du+VwODRz5sx8j3OpuSUpKSlJXbp0UfXq1eXj46Nrr71Wjz76qA4dOuRW\nl5CQIIfDoe+++07dunVTYGCgateufcG+f/75p5588klFRERYz7Np06ZuX09JWrRokSIjI1W+fHn5\n+/srJiZGycnJBT729u3bdd9998nlcikkJEQPPfSQMjIy3GqPHj2qvn37KigoSBUqVNCdd96pX3/9\nNd9rcfDgQT3yyCMKDw+X0+lUlSpVdOutt+qrr7666OsFlDaELAD5BAQEqFu3bnrvvfesfXPmzFGZ\nMmXUo0ePfPWnTp1Sq1at9MEHHyg+Pl5ffPGFHnjgAY0fP15du3a16pKTk9WjRw/VqlVLc+fO1Rdf\nfKEXXnhBZ86ckSTdfPPNmjFjhiTpueeeU3JyspKTk/Xwww9fcua+ffuqTJkymj17tiZPnqy1a9cq\nOjpaR48etWrGjh2rvn376vrrr9enn36qKVOmaMuWLYqMjNTOnTvd+p0+fVodOnRQ69attXDhQg0c\nOFBvvfVWgc//cv3yyy+KjIzUtGnTlJiYqBdeeEFr1qxRy5Ytdfr06Xz1Xbt21bXXXquPP/5Y06dP\nv2Df+Ph4TZs2TYMGDdLixYv14Ycf6t5779Xhw4etmtmzZ6tLly4KCAjQnDlz9O677yo9PV3R0dFa\nuXJlvp733HOP6tatq/nz5+uZZ57R7NmzNXToUOt4bm6uOnXqpNmzZ+tf//qXFixYoObNm6tdu3b5\nesXGxmrhwoV64YUXlJiYqHfeeUd33HGH23zAVcEAwP+ZMWOGkWTWrVtnli5daiSZbdu2GWOMadas\nmYmLizPGGHP99debqKgo637Tp083ksx//vMft37jxo0zkkxiYqIxxpiJEycaSebo0aMXnGHdunVG\nkpkxY0aRZr777rvd9q9atcpIMqNGjTLGGJOenm58fX1Nhw4d3Or27t1rnE6n6dWrl7Wvd+/eRpKZ\nMmWKW+3o0aONJLNy5UpjjDG7du264KySzIsvvphvzl27dhX4PHJzc83p06fNnj17jCTz2WefWcde\nfPFFI8m88MILl3w9jDGmYcOG5q677rrg8ZycHBMWFmYaNWpkcnJyrP3Hjh0zwcHBpkWLFvkee/z4\n8W49BgwYYHx8fExubq4xxpgvvvjCSDLTpk1zqxs7dmy+16JChQpmyJAhhXouQGnGShaAAkVFRal2\n7dp67733tHXrVq1bt+6Cpwq/+eYb+fn5qVu3bm774+LiJElff/21JFmnArt3767//Oc/+v333z02\n7/333+92u0WLFqpZs6aWLl0q6ewq2smTJ62Z8oSHh+uf//ynNePFevbq1UuSrJ7FlZaWpv79+ys8\nPFxeXl4qV66catasKUn5TmFKZ1eTCuMf//iH/vvf/+qZZ57RsmXLdPLkSbfjO3bs0P79+xUbG6sy\nZf7/j4EKFSronnvuUUpKSr5rvjp37ux2+4YbbtCpU6eUlpYm6eybIqSzX9tz5Z16Pn++mTNnatSo\nUUpJSSlw1Q64GhCyABTI4XCoT58++uijjzR9+nTVrVtXt912W4G1hw8fVmhoqBwOh9v+4OBgeXl5\n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\njBISEhQWFiZfX19FR0dr+/btHnxFAADA1aJEQ9by5cv12GOPKSUlRUlJSTpz5ozatGmjEydOuNX1\n69dPBw4csLa33nrL7XivXr20adMmLV68WIsXL9amTZsUGxtrHc/MzFRMTIzCwsK0bt06vf7665o4\ncaImTZpk1SQnJ6tHjx6KjY3V5s2bFRsbq+7du2vNmjVWzfjx4zVp0iRNnTpV69atU2hoqGJiYnTs\n2DGbXiEAAFBqmStIWlqakWSWL19u7YuKijKDBw++4H2+//57I8mkpKRY+5KTk40k8+OPPxpjjHnz\nzTeNy+Uyp06dsmrGjh1rwsLCTG5urjHGmO7du5t27dq59W7btq3p2bOnMcaY3NxcExoaal5++WXr\n+KlTp4zL5TLTp08vcLZTp06ZjIwMa9u3b5+RZDIyMgr7kgAAgBKWkZFxWT+/r6hrsjIyMiRJQUFB\nbvtnzZqlypUr6/rrr9eTTz7ptnKUnJwsl8ul5s2bW/tuueUWuVwurV692qqJioqS0+m0atq2bav9\n+/dr9+7dVk2bNm3cHrdt27ZWj127dik1NdWtxul0Kioqyqo539ixY61TmC6XS+Hh4UV9SQAAQCnl\nVdID5DHGKD4+Xi1btlTDhg2t/ffff78iIiIUGhqqbdu2adiwYdq8ebOSkpIkSampqQoODs7XLzg4\nWKmpqVbNNddc43Y8JCTEOhYREaHU1FRr37k15/Y4937n1uzZs6fA5zRs2DDFx8dbtzMzM20NWq8m\n/eSRPkNj6nqkDwAAf2dXTMgaOHCgtmzZopUrV7rt79evn/Xnhg0bqk6dOmratKm+++473XzzzZIk\nh8ORr58xxm3/+TXm/y56v1TN+fsKU5PH6XS6rZ4BAIC/jyvidOHjjz+uRYsWaenSpapevfpFa2++\n+WaVK1dOO3fulCSFhobqjz/+yFd38OBBa9UpNDTUWonKk5aWJkmXrDn3uKSL1gAAAOQp0ZBljNHA\ngQP16aef6ptvvlFERMQl77N9+3adPn1aVatWlSRFRkYqIyNDa9eutWrWrFmjjIwMtWjRwqr59ttv\nlZ2dbdUkJiYqLCzMOo0YGRlpnYI8tyavR94py3NrsrOztXz5cqsGAAAgT4mGrMcee0wfffSRZs+e\nLX9/f6Wmpio1NVUnT56UJP3yyy8aOXKk1q9fr927d+vLL7/Uvffeq5tuukm33nqrJKl+/fpq166d\n+vXrp5SUFKWkpKhfv37q2LGj6tWrJ+nsRzw4nU7FxcVp27ZtWrBggcaMGaP4+HjrVN/gwYOVmJio\ncePG6ccff9S4ceP01VdfaciQIZLOniYcMmSIxowZowULFmjbtm2Ki4tT+fLl1atXrxJ49QAAwJXM\nYcx5n8j5Vz74Ba5lmjFjhuLi4rRv3z498MAD2rZtm44fP67w8HDdeeedevHFF93egXjkyBENGjRI\nixYtkiR17txZU6dOVcWKFa2arVu36rHHHtPatWsVGBio/v3764UXXnCb4ZNPPtFzzz2nX3/9VbVr\n19bo0aPVtWtX67gxRiNGjNBbb72l9PR0NW/eXG+88YbbhfoXk5mZKZfLpYyMDAUEBBTptSoMLnwH\nAMDzLvfnd4mGrL8bQhYAAKXP5f78viIufAcAALjaELIAAABsQMgCAACwASELAADABoQsAAAAGxCy\nAAAAbEDIAgAAsAEhCwAAwAaELAAAABsQsgAAAGxAyAIAALABIQsAAMAGhCwAAAAbELIAAABsQMgC\nAACwASELAADABoQsAAAAGxCyAAAAbEDIAgAAsAEhCwAAwAaELAAAABsQsgAAAGxAyAIAALABIQsA\nAMAGhCwAAAAbELIAAABsQMgCAACwASELAADABoQsAAAAGxCyAAAAbEDIAgAAsAEhCwAAwAaELAAA\nABsQsgAAAGxAyAIAALABIQsAAMAGhCwAAAAbELIAAABsQMgCAACwASELAADABoQsAAAAGxCyAAAA\nbEDIAgAAsAEhCwAAwAaELAAAABsQsgAAAGxAyAIAALABIQsAAMAGhCwAAAAbELIAAABsQMgCAACw\nASELAADABoQsAAAAGxCyAAAAbEDIAgAAsAEhCwAAwAaELAAAABsQsgAAAGxAyAIAALBBiYassWPH\nqlmzZvL391dwcLDuuusu7dixw60mKytLjz/+uCpXriw/Pz917txZv/32m1vN3r171alTJ/n5+aly\n5coaNGiQsrOz3WqWL1+uJk2ayMfHR7Vq1dL06dPzzfPmm28qIiJCPj4+atKkiVasWFHkWQAAAKQS\nDlnLly/XY489ppSUFCUlJenMmTNq06aNTpw4YdUMGTJECxYs0Ny5c7Vy5UodP35cHTt2VE5OjiQp\nJydHd955p06cOKGVK1dq7ty5mj9/vp544gmrx65du9ShQwfddttt2rhxo5599lkNGjRI8+fPt2rm\n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\nALABIQsAAMAGhCwAwFUjJydHy5cvV3p6ekmPAvDuwqtdcnKy3nrrLf3yyy+aN2+ewsLCNGvWLEVE\nRPztP0Q1Kysr3yfyF8fXX3+tr7/+WmlpacrNzXU79t577xWr9+nTp5Wamqo///xTVapUUVBQULH6\nXY2OHj1a7N+ocPr0aa1fv167d++2XuubbrpJ4eHhHprSHkePHtXatWsL/Lv34IMPFqv3ihUrrO8h\nn3zyiapVq6YPP/xQERERatmy5WX3LVu2rA4cOKDg4GC3/YcPH1ZwcLBycnIuu7ePj49++OEHRURE\nXHaPkpCZmam9e/fK4XCoRo0a8vf391jvo0eP6pNPPtEvv/yip556SkFBQfruu+8UEhKiatWqFav3\n2rVrtWzZsgL//k2aNOmyes6cOVPdu3dX+fLlizVbibuM35WMUuLTTz81Pj4+Ji4uzjidTvPLL78Y\nY4x5/fXXTYcOHUp4ur/e4sWLTe/evU2tWrWMl5eXKVOmjKlQoYK5/fbbzahRo8zvv/9+2b0TEhJM\nmTJlzD/+8Q/TpUsXc9ddd7ltl+PYsWNm+vTpJioqyvj6+poyZcpYW40aNczDDz9s1q5de9kzl2Yv\nv/yymTt3rnX73nvvNWXKlDFhYWFm06ZNRe63Zs0a88ADD5jy5csbh8NhAgICTEhIiPH29jZlypQx\n1113nZk0aZI5fvy4J5+GRyxatMj4+/ubMmXKGJfLZSpWrGhtgYGBxer9ySefGF9fX/Pwww+7fQ95\n4403TPv27YvV2+FwmD/++CPf/t9//934+PgUq3fTpk3NV199Vawef6UdO3aYmJgY6/tSmTJljJeX\nl2nfvr3ZuXNnsftv3rzZVKlSxVx77bXGy8vL+jo+99xzJjY2tli9R48ebRwOh7nuuutMVFSUiY6O\ntrZWrVpddt/Q0FDj7+9vHnroIbNq1apizViSCFlXsZtuusnMmDHDGGNMhQoVrH9Y3333nQkJCfHI\nY5w5c8Z88skn5qWXXjKjRo0y8+fPN2fOnCl236VLlxZ/uP+zYMECU7duXRMSEmL69Oljpk2bZhYt\nWmSSkpLMvHnzzPPPP2+io6ON0+k0jz76qElLSyvyY4SGhpoPPvjAYzNPmjTJVKpUyTRp0sSMGDHC\n/Pe//zVbtmwxO3fuNGvWrDHvvvuuiYuLMy6Xy7Rt29b89NNPl/U4Z86cMRMmTDDNmjUzISEhJjAw\n0G27UkVERFjfeBMTE03FihXNkiVLTN++fU1MTEyRenXt2tWEhISYwYMHm6+//tocO3bM7fiOHTvM\nO++8Y1q3bm2qVq3qkR/eWVlZ5scffzSnT58udq86deqYwYMHmxMnThS71/luvPFG8/777xtj3L+H\nbNy48bK/h0yZMsVMmTLFlClTxowePdq6PWXKFDNp0iRz1113mRtvvLFYcy9ZssTceOON5vPPPzf7\n9+83GRkZbltxJSYmmpUrV1q3p02bZpo0aWJiY2NNenp6kXr98ccfJjg42NSuXdu8/PLLZuHChWbB\nggVm9OjRplatWqZq1arm4MGDxZq3devW5qmnnjLGuH8dV61aZWrWrFms3sHBwdbPGU86c+aM+eyz\nz8zdd99tvL29Tb169czLL79sDhw44PHHshMh6yrm6+trdu/ebYxx/4f1yy+/GKfTWez+O3fuNHXr\n1jXly5c3N910k7nxxhtN+fLlTb169czPP/9crN5Op9PUqlXLvPTSS2bv3r3F6tWsWTOzaNEik5OT\nc9G63377zTz11FNm4sSJRX6MoKCgYj/nc3Xr1s1s2bLlknUnT540b7zxhnn77bcv63Gef/55U7Vq\nVTNhwgTj4+NjXnrpJdO3b19TqVIlM2XKlCL3y1s9KcxWHD4+Ptbfi0GDBplHHnnEGHM2EFWsWLFI\nvSZPnmxOnTpVqNrNmzebxYsXF23Yc5w4ccI89NBDpmzZsqZs2bLWv8nHH3/cjB079rJ6li9f3urj\nab6+vmbXrl3GGM99D7nmmmvMNddcYxwOhwkPD7duX3PNNaZu3bqmTZs2JiUlpVhzOxwOazt3BTjv\ndnE1atTI/O///q8xxpht27YZp9NpnnrqKdOsWTPTp0+fIvUaNmyYueGGGwpcJT127Ji54YYbzPDh\nw4s1b0BAgPX96dyv4+7du4v9syA0NPSy/yevsP744w/zyiuvmEaNGply5cqZTp06mYULF17ye/qV\ngJB1FYuIiDBff/21Mcb9H9YHH3xg6tevX+z+7du3N+3atTOHDx+29h06dMi0a9eu2KcjDx8+bKZM\nmWJuuukmU7ZsWdOmTRszb948k5WVVdyxbfH000+bkSNHlvQYRVarVi3rh0WFChWsb8RTpkwx9913\nX5H7zZw509peeeUVExgYaHr27GmtVPTs2dMEBgaaSZMmFWvuqlWrWitZdevWNf/5z3+MMcb8+OOP\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f9c23225f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt; plt.rcdefaults()\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "#按歌曲名字来统计其播放量的总数\n",
    "popular_songs = triplet_dataset_sub_song_merged[['title','listen_count']].groupby('title').sum().reset_index()\n",
    "#对结果进行排序\n",
    "popular_songs_top_20 = popular_songs.sort_values('listen_count', ascending=False).head(n=20)\n",
    "\n",
    "#转换成list格式方便画图\n",
    "objects = (list(popular_songs_top_20['title']))\n",
    "#设置位置\n",
    "y_pos = np.arange(len(objects))\n",
    "#对应结果值\n",
    "performance = list(popular_songs_top_20['listen_count'])\n",
    "#绘图\n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Most popular songs')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里展示了最受欢迎的歌曲，使用groupby函数可以很方便的对每首歌曲统计其播放情况，我们求的是总和也就是总播放量。这份排行数据就可以当做最受欢迎歌曲来推荐给用户了。\n",
    "同样的方法我们还可以对专辑和歌手的播放情况分别进行统计："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最受欢迎的releases"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:31:19.717845Z",
     "start_time": "2017-09-24T14:31:14.004246Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAKHCAYAAACyzF0YAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3X98z/X+//H7u83eG9mbYZuxtJAw\n6WQdpjQlv38UiXLOsmInB0njU41ofEJ+JD+jzhGVn5X0i8PW8SsZIb/7cdTBJlvDZkNsM8/vH332\n+nrbsLFXM27Xy+V1yfv1erwer8f7PZfcL6/X6/2awxhjBAAAgBJ1U2kPAAAAcD0iZAEAANiAkAUA\nAGADQhYAAIANCFkAAAA2IGQBAADYgJAFAABgA0IWAACADQhZAAAANiBkATeIefPmyeFwyOFwaO3a\ntQW2G2NUp04dORwOtWzZ0pYZDh8+rLi4OO3YscOW/qUl/7M9cOCA7cdau3at9XN0OBzy8PBQtWrV\n1LlzZ23duvWK+/6R7wG4URCygBtMxYoVNWfOnALr161bp59//lkVK1a07diHDx/WqFGjrruQVRrG\njh2rxMRErV27ViNGjNDGjRsVERGhffv2lfZoAP4PIQu4wfTs2VNLly5VVlaW2/o5c+YoPDxct9xy\nSylNhny//fbbZWvq1q2rZs2aqUWLFho0aJDeeOMN/fbbb5o/f/4fMCGAoiBkATeYJ554QpK0aNEi\na11mZqaWLl2qp59+utB90tPT1b9/f9WoUUNeXl667bbbNHz4cGVnZ7vVffjhh2ratKlcLpfKly+v\n2267zeq5du1a3XPPPZKkp556yrrcFRcXd9FZ8y9hJSQk6KmnnpKfn58qVKigzp0767///W+B+nfe\neUeNGzeWt7e3/Pz81LVrV33//fduNVFRUbr55pu1d+9etWrVShUqVFC1atU0cOBAt3Bz4MABORwO\nzZs3r8BxLje3JCUkJOjhhx9WzZo15e3trTp16uiZZ57R0aNH3eri4uLkcDj07bffqnv37qpcubJq\n1659yd6FCQsLkyT9+uuvBbZ9+eWXatWqlXx9fVW+fHnde++9+ve//12kvkXZ96efftJTTz2lunXr\nqnz58qpRo4Y6d+6s3bt3u9WdO3dOr776qurVqycfHx9VqlRJd955p6ZOnepWt2/fPvXq1Uv+/v5y\nOp2qX7++Zs6cWZyPA7gmELKAG4yvr6+6d++ud955x1q3aNEi3XTTTerZs2eB+jNnzuiBBx7Qe++9\np5iYGC1fvlx//etfNWHCBHXr1s2qS0xMVM+ePXXbbbdp8eLFWr58uUaOHKmzZ89Kku6++27NnTtX\nkvTyyy8rMTFRiYmJ6tu372Vn7tOnj2666SYtXLhQU6ZM0TfffKOWLVvq+PHjVs24cePUp08fNWzY\nUB9//LGmTp2qXbt2KTw8vMAltNzcXHXo0EGtWrXSJ598ooEDB+qtt94q9P1fqZ9//lnh4eGaNWuW\n4uPjNXLkSG3evFn33XefcnNzC9R369ZNderU0YcffqjZs2cX+3j79++XJN1+++1u6+fPn682bdrI\n19dX7777rj744AP5+fmpbdu2lw1aRd338OHDqlKlil577TWtXLlSM2fOlKenp5o2baoff/zRqpsw\nYYLi4uL0xBNPaPny5VqyZIn69Onj9nP87rvvdM8992jPnj16/fXX9cUXX6hjx44aNGiQRo0aVezP\nBShVBsANYe7cuUaS2bJli1mzZo2RZPbs2WOMMeaee+4xUVFRxhhjGjZsaCIiIqz9Zs+ebSSZDz74\nwK3f+PHjjSQTHx9vjDFm0qRJRpI5fvz4RWfYsmWLkWTmzp1brJm7du3qtv7rr782ksyrr75qjDEm\nIyPD+Pj4mA4dOrjVJSUlGafTaXr16mWt6927t5Fkpk6d6lY7ZswYI8ls2LDBGGPM/v37LzqrJPPK\nK68UmHP//v2Fvo9z586Z3Nxcc/DgQSPJfPrpp9a2V155xUgyI0eOvOznYYyxfnZLliwxubm55rff\nfjNff/21qVevnmnQoIHJyMiwak+dOmX8/PxM586d3Xrk5eWZxo0bmz//+c8XfQ/F2fdCZ8+eNTk5\nOaZu3brm+eeft9Z36tTJ3HXXXZd8f23btjU1a9Y0mZmZbusHDhxovL29TXp6+iX3B64lnMkCbkAR\nERGqXbu23nnnHe3evVtbtmy56KXC1atXq0KFCurevbvb+qioKEmyzmjkXwrs0aOHPvjgA/3yyy8l\nNu9f/vIXt9fNmzdXrVq1tGbNGkm/n0U7ffq0NVO+4OBgPfjgg4WesbmwZ69evSTJ6nm10tLS1K9f\nPwUHB8vT01PlypVTrVq1JKnAJUxJevTRR4vVv2fPnipXrpx1CS8rK0vLly9XpUqVrJqNGzcqPT1d\nvXv31tmzZ63l3LlzateunbZs2aJTp04V2r84+549e1Zjx45VgwYN5OXlJU9PT3l5eWnfvn1u7/XP\nf/6zdu7cqf79+2vVqlUF7gs8c+aM/v3vf6tr164qX76823E7dOigM2fOaNOmTcX6nIDS5FnaAwD4\n4zkcDj311FOaNm2azpw5o9tvv10tWrQotPbYsWMKDAyUw+FwW+/v7y9PT08dO3ZMknT//ffrk08+\n0bRp0/Tkk08qOztbDRs21PDhw637wK5UYGBgoevyj53/3+rVqxeoCwoKUkJCgts6T09PValSpdBj\n5Pe6GufOnVObNm10+PBhjRgxQo0aNVKFChV07tw5NWvWTKdPny6wT2GzX8r48eP14IMP6rffflN8\nfLzGjRunRx55RJs3b5bT6ZT0/+/PujAgny89PV0VKlQosL44+8bExGjmzJl68cUXFRERocqVK+um\nm25S37593d5rbGysKlSooPnz52v27Nny8PDQ/fffr/HjxyssLEzHjh3T2bNnNX36dE2fPr3QY154\nTxtwLSNkATeoqKgojRw5UrNnz9aYMWMuWlelShVt3rxZxhi3oJWWlqazZ8+qatWq1rqHH35YDz/8\nsLKzs7Vp0yaNGzdOvXr10q233qrw8PArnjU1NbXQdXXq1LFmlKSUlJQCdYcPH3abUfr9zMuxY8fc\nglb+MfLXeXt7S1KBm/uLEsL27NmjnTt3at68eerdu7e1/qeffrroPheG2Mu57bbbrJvd77//fvn4\n+Ojll1/W9OnTNXToUEmy3vf06dPVrFmzQvsEBAQUur44+86fP19PPvmkxo4d67b96NGjbmfWPD09\nFRMTo5iYGB0/flxffvmlhg0bprZt2yo5OVmVK1eWh4eHIiMjNWDAgEKPGRISUuh64FrE5ULgBlWj\nRg39z//8jzp37uwWBC7UqlUrnTx5Up988onb+vfee8/afiGn06mIiAiNHz9ekrR9+3ZrvaRCz+Rc\nyoIFC9xeb9y4UQcPHrQemhoeHi4fH58Cjy84dOiQVq9eXeiMF/ZcuHChJFk9AwIC5O3trV27drnV\nffrpp5edNz8w5b/ffG+99dZl971SL7zwgurUqaPXXntNJ06ckCTde++9qlSpkr777juFhYUVunh5\neRXarzj7OhyOAu91+fLll7xkXKlSJXXv3l0DBgxQenq6Dhw4oPLly+uBBx7Q9u3bdeeddxZ6zAvP\nQALXMs5kATew11577bI1Tz75pGbOnKnevXvrwIEDatSokTZs2KCxY8eqQ4cOeuihhyRJI0eO1KFD\nh9SqVSvVrFlTx48f19SpU1WuXDlFRERIkmrXri0fHx8tWLBA9evX180336ygoCAFBQVdcoatW7eq\nb9++euyxx5ScnKzhw4erRo0a6t+/v6Tf/8EeMWKEhg0bpieffFJPPPGEjh07plGjRsnb21uvvPKK\nWz8vLy+9/vrrOnnypO655x5t3LhRr776qtq3b6/77rtP0u/B4a9//aveeecd1a5dW40bN9Y333xj\nhbFLueOOO1S7dm299NJLMsbIz89Pn3/+eYHLliWpXLlyGjt2rHr06KGpU6fq5Zdf1s0336zp06er\nd+/eSk9PV/fu3eXv768jR45o586dOnLkiGbNmlVov+Ls26lTJ82bN0933HGH7rzzTm3btk0TJ05U\nzZo13Xp27txZoaGhCgsLU7Vq1XTw4EFNmTJFtWrVUt26dSVJU6dO1X333acWLVro73//u2699Vad\nOHFCP/30kz7//HOtXr3ats8QKHGlfec9gD/G+d8uvJQLv11ojDHHjh0z/fr1M9WrVzeenp6mVq1a\nJjY21pw5c8aq+eKLL0z79u1NjRo1jJeXl/H39zcdOnQwX331lVuvRYsWmTvuuMOUK1euwLf0LjZz\nfHy8iYyMNJUqVbK+Rbhv374C9f/85z/NnXfeaby8vIzL5TIPP/yw2bt3r1tN7969TYUKFcyuXbtM\ny5YtjY+Pj/Hz8zN///vfzcmTJ91qMzMzTd++fU1AQICpUKGC6dy5szlw4ECRvl343XffmdatW5uK\nFSuaypUrm8cee8wkJSUV2Df/24VHjhy56OdwvvxvF3744YeFbm/atKmpXLmy27c8161bZzp27Gj8\n/PxMuXLlTI0aNUzHjh3delzsG5JF2TcjI8P06dPH+Pv7m/Lly5v77rvPfPXVVyYiIsLt79Lrr79u\nmjdvbqpWrWq8vLzMLbfcYvr06WMOHDjgdsz9+/ebp59+2tSoUcOUK1fOVKtWzTRv3tz6NilQVjiM\nMabUEh4AXMK8efP01FNPacuWLdb9R1crKipKH330kU6ePFki/QDgYrgnCwAAwAaELAAAABtwuRAA\nAMAGnMkCAACwASELAADABjwn6w907tw5HT58WBUrViz2050BAEDpMMboxIkTCgoK0k03Ff38FCHr\n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\n/fffV8+ePSVJhw8fVnBwsFasWKG2bdvqX//6lzp16qTk5GQFBQVJkhYvXqyoqCilpaXJ19dXL774\noj777DN9//331rH69eunnTt3KjExUZLUtGlT3X333Zo1a5ZVU79+fT3yyCMaN25ckWa5nKysLLlc\nLmVmZsrX17fEPrd8dn1Tr6T62tmbbxcCAOxypf9+X1P3ZGVmZkqS/Pz8JEnbtm1Tbm6u2rRpY9UE\nBQUpNDRUGzdulCQlJiYqNDTUCliS1LZtW2VnZ2vbtm1Wzfk98mu2bt2q3Nxc5eTkaNu2bQVq2rRp\nYx2nKLNcKDs7W1lZWW4LAAC4MVwzIcsYo5iYGN13330KDQ2VJKWmpsrLy0uVK1d2qw0ICFBqaqpV\nExAQ4La9cuXK8vLyumRNQECAzp49q6NHj+ro0aPKy8srtOb8Hpeb5ULjxo2Ty+WyluDg4OJ8JAAA\noAy7ZkLWwIEDtWvXLi1atOiytcYYORwO6/X5fy5qTf5V0svVFNa7qDWxsbHKzMy0luTk5Ev2AgAA\n149rImQ9++yz+uyzz7RmzRrVrFnTWh8YGKicnBxlZGS41aelpVlnnQIDAwucScrIyFBubu4la9LS\n0uTp6akqVaqoatWq8vDwKLTm/B6Xm+VCTqdTvr6+bgsAALgxlGrIMsZo4MCB+vjjj7V69WqFhIS4\nbW/SpInKlSunhIQEa11KSor27Nmj5s2bS5LCw8O1Z88epaSkWDXx8fFyOp1q0qSJVXN+j/yasLAw\nlStXTl5eXmrSpEmBmoSEBOs4RZkFAAAgX6n+7sIBAwZo4cKF+vTTT1WxYkXrTJLL5ZKPj49cLpf6\n9OmjIUOGqEqVKvLz89PQoUPVqFEjPfTQQ5J+vzm9QYMGioyM1MSJE5Wenq6hQ4cqOjraOnPUr18/\nzZgxQzExMYqOjlZiYqLmzJnjdmkyJiZGkZGRCgsLU3h4uN5++20lJSWpX79+1kyXmwUAACBfqYas\n/McltGzZ0m393LlzFRUVJUl644035OnpqR49euj06dNq1aqV5s2bJw8PD0mSh4eHli9frv79++ve\ne++Vj4+PevXqpUmTJln9QkJCtGLFCj3//POaOXOmgoKCNG3aND366KNWTc+ePXXs2DGNHj1aKSkp\nCg0N1YoVK1SrVi2r5nKz4NrC4yEAAKXpmnpO1vWO52T9sc/JImQBAErCdfGcLAAAgOsFIQsAAMAG\n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\nPEt7gLIiJydH27Zt00svveS2vk2bNtq4cWOh+2RnZys7O9t6nZmZKUnKysqyZcYzp06WSJ8L5yup\nvnb2LuwzLYu9+ayvj978HPmsL9W3rPYuq591SfY1xhRvR4Mi+eWXX4wk8/XXX7utHzNmjLn99tsL\n3eeVV14xklhYWFhYWFiugyU5OblY2YEzWcXkcDjcXhtjCqzLFxsbq5iYGOv1uXPnlJ6eripVqlx0\nHztlZWUpODhYycnJ8vX1veb70vuP7V0WZy6rvcvizPT+4/rS+4/rW1TGGJ04cUJBQUHF2o+QVURV\nq1aVh4eHUlNT3danpaUpICCg0H2cTqecTqfbukqVKtk2Y1H5+vra8pfUrr70/mN7l8WZy2rvsjgz\nvf+4vvT+4/oWhcvlKvY+3PheRF5eXmrSpIkSEhLc1ickJKh58+alNBUAALhWcSarGGJiYhQZGamw\nsDCFh4fr7bffVlJSkvr161faowEAgGuMR1xcXFxpD1FWhIaGqkqVKho7dqwmTZqk06dP6/3331fj\nxo1Le7Qi8/DwUMuWLeXpWbL52q6+9P5je5fFmctq77I4M73/uL70/uP62slhTHG/jwgAAIDL4Z4s\nAAAAGxCyAAAAbEDIAgAAsAEhCwAAwAaELADAdePs2bNasGCBfv3119IeBSBkXc9WrlypDRs2WK9n\nzpypu+66S7169VJGRsYV942KitL69etLYsQCnn76aZ04caLA+lOnTunpp5++6v6LFi1SRESEbrnl\nFh08eFCSNG3aNH3++edX3TsjI0OTJk1Snz591LdvX02aNEnp6elX3deun6Pdvv76a3Xt2lV33HGH\n6tevr27duikxMbG0x7qkXbt2XXTbJ5988gdOUjzvv/++7r33XgUFBVl/r6dMmaJPP/30qvouWrTo\nottiY2OvqvfevXsvum3lypVX3NfT01PR0dE6c+bMFfc439tvv13k5WrMnz+/xGa+0Lfffqvdu3db\nrz/99FM98sgjGjZsmHJycmw5Jv7PFf22ZJQJoaGhZvny5cYYY3bt2mWcTqeJjY01TZs2NVFRUVfc\nt1u3bsbpdJo6deqYMWPGmEOHDpXUyOamm24yv/76a4H1R44cMR4eHlfV+6233jJ+fn4mLi7O+Pj4\nmJ9//tkYY8w777xjHnjggavqvXbtWuNyuUxwcLDp2rWr6dq1q7nllluMr6+vWbt27VX1Lumf46pV\n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\ngUBA+vr6zHNDQ0MyNTWlXr160cWLF1nrHzhwgBQUFKhv376kqKhI/fr1IzMzM2rUqBHndXJ3d3c6\ndOgQJ433kZ6eTgEBAaSvr0+KiorUv39/OnToEJWVlbHS09TUrHWTl5cnoVBI/fr1Ywz02OLi4lKr\nb9W+ffvIycmp3noCgYCMjY15N5KtjpqaWq2mnvfu3SORSMRZv3379lKGnjY2NmRra0v29vY0YsQI\nio2NrZOWoaEhPX78mHn8rs3IyKhefaxulVEzDo6vWC+it15Wjo6OdP36dU46tVHdPqQ6t27d4uzB\ntWbNGlJVVaUZM2bQsWPHKDIykgICAkhVVZXWrl3LSdvc3JwxI62e+r9p0yZO5q/x8fGkrq5OrVq1\nInl5ebKwsCCRSESNGjUiOzs7Tn3evHkzycnJ0U8//URr1qyhNWvW0KBBg0hBQUEqdq2+VPfJqv55\n5OXl8WKpIqaiooKys7MlzI658uDBAzp06BBt2rSJNmzYILF9CTQMsr5iunfvTk+ePOFdt23btvTr\nr78S0f9+sFVVVTRmzBgpz6W6cOzYMWYLCQmhli1b0sKFCykiIkLiNb4cnMXEx8fT2LFjqWnTptSo\nUSNetSsrKyklJYWsra1p2rRpnLRUVFRq9R27e/cua5+sMWPGkI6ODsnLy1Pfvn3pjz/+kDBS5Urj\nxo0pOTlZqv3ChQu8fNazZs2iRo0akaOjI/n7+5Ofnx917dqVGjVqRL6+vtSzZ08SCoUUGRnJeV9s\nycvLY3yN8vLy3rtxQVNTkxQVFUkoFJKysjJpaWlJbFxQVVWtdfB2/fp1zl57hoaGtSazhIaGsk6a\nEbNjxw7S19eniIgIUlNToyNHjtDKlStJJBLR3r17Wet26dKFZs6cSUT/O/c9ffqU+vTpwzrRQIye\nnp5UEgrR22D9+iZz1KRZs2aUlpZGRJKDrDNnzvBiRlpaWkpjx44leXl5KdPQoKAg1rq7du0iRUVF\nEolEZGBgwOmm51PRMMhqoN6oqqoyDuRNmjSha9euEdHbu1tdXd16632M7K7auH79Os2cOZNatmxJ\nioqKvGqLOXv2LJmamnLSMDU1JX9/f6l2f39/VtriGZaKigqKiIigPn36kJycHOno6NCMGTNqNVWt\nL4MGDSIXFxeJWbznz5+Ti4sL41jPhdGjR9OSJUuk2pcuXUqjR48mIqIFCxZQhw4dOO3nzZs3lJ6e\n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\ntGjRAn/88Qc6deqE3NxctG3bllOJmh49emD06NEYOnSoRPv+/fuxfft2xMfHs9aWVUygpqYmrly5\nAhMTE6mlWQsLC071YDt37gxXV1csW7aM0W7atCk8PDzQv39/jB07tl56/v7+dX4vmwDyj1Ff1d3d\nHbGxsWjSpAnatGkjNQv5uRWCr42G5cIGWJGTk4P4+Hhme/bsGezs7ODk5MRJd+fOnfD09ESHDh2Y\nH9SbN2/Qo0cP7Ny5E8DbGJQ1a9Zw/j+I+e+//5CTk8ObHt+4u7sjMjKyXifNT81vv/2G2bNn4/79\n+zhy5AizbJOSkoIhQ4Zw1s/IyEBqaipnG4Ga/PHHHxLPKyoqkJubC3l5ebRq1YqXQRbxXAxZQUEB\n+/btw5IlS5Ceno6qqirY2NjwUsvQ2NgY+fn5aNmyJczNzRmrgqioKKmwhPqSnJyMrVu3SrV37NgR\no0eP5qQdGBjI2CNcunQJ69evZ2IC/f39WccEKigo4NWrV1LtOTk5nOug3rp1i1luk5eXR1lZGTQ0\nNLB06VK4u7vXe5BV08InNTUVlZWVMDMzAwBkZmZCTk6OdR3T+mTtskVTU7POMcafLZ92Iq2BjwFf\ny4W7du0iT09P0tfXJw0NDfr+++9p5cqVlJyczGutKqK3RpLiemZ8OJC/j4yMjM9yiUlMYGAgaWpq\n0sCBA2n58uVfZP0uvunYsSOdP3/+o+zr+fPn5O7uTmFhYZx09uzZQ1ZWVqSkpERKSkrUtm1bzpqy\nJjg4mCn1cvbsWVJWViYVFRUSCoW0Zs0aTtp8VzKojoqKCmN6O3PmTBo+fDgRva3y0LRpU9a6Xl5e\nNGjQIHrz5g3jnP73339Tp06daOLEiZz6rKOjI2F0Ki4jdvXqVc5L7GvWrKH+/ftLVC548uQJDRgw\noFYD1Ab4o2G58Cvk+PHjEs+HDh2K9evXS2W+/PDDD/XSFQqFaNmyJWbPng1vb29eAt0/B65evQpb\nW9vPMksPAO+ZQTXtIYRCIUQiEUQiEZo2bYrMzEyUl5fX2xri1q1bMDc3h1AoZFLp34WlpWW9tGsS\nGxuLefPmYfny5bUGkrPJTHsfN27cQL9+/ZCXl8fq79euXYv58+dj0qRJcHBwABEhKSkJv/32GwID\nA+Hn51dvzbrObPLpJZSXl4eUlBSYmJjA1taWk1ZUVBQGDhyIVq1aSZhv5uTk4OjRo+jTpw9r7WbN\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f94cc60b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#按专辑名字来统计播放总量\n",
    "popular_release = triplet_dataset_sub_song_merged[['release','listen_count']].groupby('release').sum().reset_index()\n",
    "#排序\n",
    "popular_release_top_20 = popular_release.sort_values('listen_count', ascending=False).head(n=20)\n",
    "\n",
    "objects = (list(popular_release_top_20['release']))\n",
    "y_pos = np.arange(len(objects))\n",
    "performance = list(popular_release_top_20['listen_count'])\n",
    "#绘图 \n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Most popular Release')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 最受欢迎的歌手"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:34:20.212228Z",
     "start_time": "2017-09-24T14:34:15.653934Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAJMCAYAAADJ47NvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XtUVnX+/v/rTuQGCe5ABLwVDc0x\nCbWCxtApLAPzWJlJ2ZCUMTlqpuhUaAf1U1J5orS0GtMOJk5fs6MRVIqZeCIxT5XTqOgIkoqgZoC4\nf3/0Yy9uQYFiD6LPx1p7xb3fr/3er3vTWl5rn7AZhmEIAAAA9eqShm4AAADgQkTIAgAAsAAhCwAA\nwAKELAAAAAsQsgAAACxAyAIAALAAIQsAAMAChCwAAAALELIAAAAsQMgCLnKLFi2SzWaTzWbTqlWr\nqowbhqErrrhCNptNPXv2tKSHAwcOaPLkycrJybFk/oZScWz37NnzP93vRx99JJvNpubNm6ukpKRO\n2/7yyy+aPHlytf8v/N7vM23aNH3wwQd12ga4EBCyAEiSvL29tWDBgirrMzMz9dNPP8nb29uyfR84\ncEBTpky54EJWQ6n4PR45cqTO4eaXX37RlClTqg1Z/fr1U1ZWllq2bFmnOQlZuFgRsgBIkmJjY7Vs\n2TIVFxe7rF+wYIEiIyPVpk2bBuoMFX755Zcaa/Lz87VixQrdfPPN8vDwqDY4V8cwDJ08efKcNS1a\ntND1118vu91eqzmBix0hC4Ak6Z577pEkLVmyxFxXVFSkZcuW6YEHHqh2myNHjmjkyJFq1aqV3N3d\n1a5dO02aNKnKJar33ntP3bp1k8PhULNmzdSuXTtzzlWrVum6666TJN1///3mpcvJkyeftdeKy1YZ\nGRm6//775efnJy8vLw0YMED/+c9/qtS/8cYb6tq1qzw8POTn56c77rhDO3fudKmJj4/XpZdequ3b\nt6tXr17y8vJSixYtNHr0aJdws2fPHtlsNi1atKjKfmrqW5IyMjJ02223qXXr1vLw8NAVV1yhhx56\nSIcOHXKpmzx5smw2m7799lsNHjxYvr6+at++/TnnlqQ333xTp06d0rhx4zRo0CB9+eWX2rt3b7W9\njh49WvPnz1enTp1kt9v15ptvqkWLFpKkKVOmmL+L+Ph4SdVfLty8ebP69++vgIAA2e12OZ1O9evX\nT/v37zf3c+LECb355pvmfBWXnX/55RdNmDBBISEh5u8mIiLC5f9BoDEjZAGQJPn4+Gjw4MF64403\nzHVLlizRJZdcotjY2Cr1v/76q2666Sa99dZbSkxM1Keffqq//vWveuGFFzRo0CCzLisrS7GxsWrX\nrp1SU1P16aef6qmnntKpU6ckSddee60WLlwoSXriiSeUlZWlrKwsPfjggzX2PHz4cF1yySV69913\nlZKSog0bNqhnz546evSoWZOcnKzhw4frqquu0vvvv68XX3xR3333nSIjI7Vr1y6X+crKytS3b1/1\n6tVLH3zwgUaPHq1XX3212u//e/3000+KjIzUvHnzlJ6erqeeekrr16/XX/7yF5WVlVWpHzRokK64\n4gq99957mj9/fo3zv/HGG2rZsqX69OmjBx54QKdPn642EErSBx98oHnz5umpp57S559/rsjISKWl\npUn67dhW/C6efPLJarc/ceKEoqOjdfDgQb388svKyMhQSkqK2rRpo2PHjkn67ffv6empvn37mvO9\n8sorkqTExETNmzdPY8aMUVpamt5++23dddddOnz4cG0OJXD+MwBc1BYuXGhIMjZu3GisXLnSkGRs\n27bNMAzDuO6664z4+HjDMAzjqquuMqKioszt5s+fb0gy/vWvf7nM9/zzzxuSjPT0dMMwDGPGjBmG\nJOPo0aNn7WHjxo2GJGPhwoV16vmOO+5wWf/NN98YkoxnnnnGMAzDKCwsNDw9PY2+ffu61OXm5hp2\nu90YOnSouW7YsGGGJOPFF190qX322WcNScaaNWsMwzCM3bt3n7VXScbTTz9dpc/du3dX+z1Onz5t\nlJWVGXv37jUkGR9++KE59vTTTxuSjKeeeqrG41Fh9erVhiTj8ccfN+cPCQkx2rZta5w+fbpKrw6H\nwzhy5IjL+p9//rnK9zjb99m0aZMhyfjggw/O2ZeXl5cxbNiwKuvDwsKM22+/vdbfD2hsOJMFwBQV\nFaX27dvrjTfe0NatW7Vx48azXir86quv5OXlpcGDB7usr7i09OWXX0qSeSlwyJAh+te//qX//ve/\n9dbvvffe6/K5e/fuatu2rVauXCnpt7MoJ0+eNHuqEBwcrJtvvtns8VxzDh06VJLMOf+ogoICjRgx\nQsHBwXJzc1PTpk3Vtm1bSapyCVOS7rzzzlrPXXH/VcXvrOJS3969e6v9rjfffLN8fX1/z9eQJF1x\nxRXy9fXVY489pvnz52vHjh112v7Pf/6zPvvsMz3++ONatWpVjfeEAY0NIQuAyWaz6f7779c777yj\n+fPn609/+pNuuOGGamsPHz6soKAg2Ww2l/UBAQFyc3MzL/nceOON+uCDD3Tq1Cndd999at26tcLC\nwurlvpugoKBq11Xsu+K/1T0N53Q6q1yWcnNzU/PmzavdR31cwjp9+rRiYmL0/vvv69FHH9WXX36p\nDRs2aN26dZJUbcio7ZN8x44d03vvvac///nPatGihY4ePaqjR4/qjjvukM1mq/YG+Lo+JXgmh8Oh\nzMxMXX311Zo4caKuuuoqOZ1OPf3009Ve+jzTSy+9pMcee0wffPCBbrrpJvn5+en222+vchkXaKwI\nWQBcxMfH69ChQ5o/f77uv//+s9Y1b95cBw8elGEYLusLCgp06tQp+fv7m+tuu+02ffnllyoqKtKq\nVavUunVrDR06VFlZWX+o1/z8/GrXVQSliv/m5eVVqTtw4IBLj5J06tSpKmGqYh8Vc3l4eEhSlZv7\naxPCtm3bpi1btmj69Ol6+OGH1bNnT1133XVVgl1lZ4bYs1myZIl++eUXbdiwQb6+vubSpUsXGYah\n5cuXq7Cw8HfNfS6dO3dWamqqDh8+rJycHMXGxmrq1KmaOXNmjdt6eXlpypQp+v7775Wfn6958+Zp\n3bp1GjBgwB/uCzgfELIAuGjVqpX+8Y9/aMCAARo2bNhZ63r16qXjx49Xef/RW2+9ZY6fyW63Kyoq\nSs8//7yk355Mq1gvVX8m51wWL17s8nnt2rXau3ev+fRaZGSkPD099c4777jU7d+/X1999VW1PZ45\n57vvvitJ5pyBgYHy8PDQd99951L34Ycf1thvRag58xUIr776ao3b1mTBggXy9vbWl19+qZUrV7os\n06dPV0lJSZXvVp3f+7uw2Wzq2rWrZs+ercsuu0zffvuty5w1zRcYGKj4+Hjdc889+uGHH2r1ugrg\nfOfW0A0AOP8899xzNdbcd999evnllzVs2DDt2bNHnTt31po1azRt2jT17dtXt9xyiyTpqaee0v79\n+9WrVy+1bt1aR48e1YsvvqimTZsqKipKktS+fXt5enpq8eLF6tSpky699FI5nU45nc5z9rBp0yY9\n+OCDuuuuu7Rv3z5NmjRJrVq10siRIyVJl112mZ588klNnDhR9913n+655x4dPnxYU6ZMkYeHh55+\n+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\nx+XCI0eO6Morr6yy/sorr9SRI0fqpSkAAIDGrs5nsrp27aq5c+dWeV/W3Llz1bVr13prDED9qq8/\nPs0fngaA2qlzyHrhhRfUr18/ffHFF4qMjJTNZtPatWu1b98+rVixwooeAQAAGp06Xy6MiorSDz/8\noDvuuENHjx7VkSNHNGjQIP3www+64YYbrOgRAACg0anzmSxJatWqFTe4AwAAnEOdz2QtXLhQ7733\nXpX17733nt588816aQoAAKCxq3PIeu655+Tv719lfUBAgKZNm1YvTQEAADR2dQ5Ze/fuVUhISJX1\nbdu2VW5ubr00BQAA0NjVOWQFBATou+++q7J+y5Ytat68eb00BQAA0NjVOWTdfffdGjNmjFauXKny\n8nKVl5frq6++0iOPPKK7777bih4BAAAanTo/XfjMM89o79696tWrl9zcftv89OnTuu+++7gnC7hI\n8aJTAKiqziHL3d1dS5cu1TPPPKOcnBx5enqqc+fOatu2rRX9AQAANEq/6z1ZktShQwd16NChPnsB\nAAC4YNT5niwAAADUjJAFAABgAUIWAACABX73PVkA8L/Ak4sAGqvfFbJ+/fVXfffddyooKNDp06dd\nxgYOHFgvjQGA1QhwAKxU55CVlpam++67T4cOHaoyZrPZVF5eXi+NAQAANGZ1vidr9OjRuuuuu5SX\nl6fTp0+7LAQsAACA39Q5ZBUUFCgxMVGBgYFW9AMAAHBBqHPIGjx4sFatWmVBKwAAABeOOoesuXPn\n6v3331d8fLxmzpypl156yWWpi+TkZF133XXy9vZWQECAbr/9dv3www8uNSUlJXr44Yfl7+8vLy8v\nDRw4UPv373epyc3N1YABA+Tl5SV/f3+NGTNGpaWlLjWZmZkKDw+Xh4eH2rVrp/nz51fp55VXXlFI\nSIg8PDwUHh6ur7/+us69AAAASL/jxvd3331Xn3/+uTw9PbVq1SrZbDZzzGazacyYMbWeKzMzU6NG\njdJ1112nU6dOadKkSYqJidGOHTvk5eUlSRo7dqw+/vhjpaamqnnz5ho/frz69++v7OxsNWnSROXl\n5erXr59atGihNWvW6PDhwxo2bJgMw9CcOXMkSbt371bfvn2VkJCgd955R998841GjhypFi1a6M47\n75QkLV26VGPHjtUrr7yiHj166NVXX1WfPn20Y8cOtWnTpla9AAAAVKhzyHriiSc0depUPf7447rk\n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\ny1pLjG96iA4dOsDf3x+7du3igl6fPXuGgIAAdOzYkZcmAEyaNAmLFi2CiooKAKBRo0b/eccK+BKL\n5uvrywVlJyYmwszMDH5+fjA0NMT06dNl1iyPWml6enp4/vx5sZQbMTExqFu3rijH5ENhx8ne3p47\n/4qSnp5eXiaVid69e6N37974+PEjdHR0cP/+fdGKUN+/f58rMl8YHR0dmR9eBw0ahKlTp2Lfvn2i\nLPj53unZsycCAgJw69Yt2NraFrun9erVq4IsKyMVO5DGEJNevXqRo6MjPXv2jOt7+vQpOTk5Ue/e\nvXnramhoUHx8fLH++Ph4UldX56WpoqLy1enAJ0+e8E5uJ5FIyMTEhGbOnEmrVq0qtfHl8ePHZGdn\nR8rKymRmZkbm5uakrKxMTZs2FTTFaWpqSlZWVt9lMkgx8fPzo2bNmtGFCxdIU1OTm6o5dOgQNWnS\npIKtK50pU6aQg4MDPX/+nLS1tSkpKYkuXrxIZmZmFBgYKEh769atZG9vT3Xq1OHiVFauXCm49I2b\nm1uJSW9fvHhB1tbWgrTF5Ny5c4LKxnwLMzMzOnnyJBFJT/1u2bKFLC0tZdIaOXIk6erqkr29Pf3x\nxx9cCICSkhLduXNHsK0fP36kWbNmUZs2bcjc3JxMTU2lWmWnoCRcSa2yTVmXBHOyqjBi3fydnJxo\n/PjxxfrHjh1LDg4OvDRNTEwoPDy81O3Hjx8nY2NjXtq7d+8mFxcXuZeWKEpERAStWbOGVq9ezV2A\nhZCZmUljx44lVVVVmjdv3n8uw3tp1K9fny5fvkxE0je4pKQk0tbWrkjTvsrnz59p0KBBXEyTsrIy\nKSgokJeXl6Baor///jtVr16dgoKCSF1dnfs8goODqX379oJsbtmyJXl7e0v1/fPPP9SoUaNKFaz/\nNbKysuQesL9kyRKysrKi6Oho0tbWpgsXLtD27dupRo0atHbtWl42hoSEkKOjI6mqqlKvXr1IUVGR\nbt26JdjWAQMGUJ06dWjq1Km0cuVKuT1cMsoGc7L+A8j75n/x4kVSU1Ojdu3aUWBgIAUGBlK7du1I\nTU2Nzp8/z0vT39+fbG1tS1z1mJaWRo0bNyZ/f39Bdj99+pSCgoLIwsKC6tSpQ9OmTaPExERBmuXB\nmTNnyNTUlFq2bEn79++nQ4cOSbX/GoUdicJOVmxsLOno6PDSLFqy52tNKMnJybRnzx7avXu3XM4/\nS0tLrixP4c/j1q1bXM07vqSnp5OVlRVNmDCBiL78hho0aED9+vWr1E5/ZmYmjRs3jmrUqFFi4L48\nmDlzJqmrq3OjKmpqajRr1izBuomJiTR9+nQyNDQkHR0dGjhwIO3bt4+3nq6uLl28eFGwXSUh5ihZ\nt27dKCNnQ7X/AAAgAElEQVQjg3sdFBREb9++5V6np6fLPGpYEbDA9yrImTNnMH78eERHRxdLZvfu\n3TvY29tj/fr1aNeuHe9jxMbG4rfffkNsbCzU1dXRuHFjzJgxo1iW7LLy9u1btGrVCi9evICXlxcX\ne3T37l3s3LkTtWvXRnR0tKCSGIWJjIxEYGAgzp8/j/T0dOjr68ussWbNmm/uo6SkhNq1a8PBwUFQ\nfMihQ4fg4eFRLJbuu8gTI2ecnJzQt29f+Pr6QltbG/Hx8TA1NcX48ePx4MEDhIeHy6xZOOnm69ev\nERQUhK5du3KJKy9fvowTJ05g9uzZCAgIkNv/UsC1a9eKLVApK+rq6rh37x6MjY2lgrCTkpLQuHFj\nZGdnC7Lt6dOncHBwgLu7O/7++280bdoUO3bsKLX0VWVg3LhxOHv2LObNm4chQ4Zg3bp1ePbsGTZs\n2IDFixfD09NTLsfJysrC3bt3kZ+fDysrK2hpaclFF/gSU/v333/jr7/+wvHjx3mXSTI1NcWxY8dg\naWkpN9sKGDhwICIjIzF48GCuLFph/P39eWsrKiri+fPn3HVTR0cHsbGxXIxtWloaDA0NK//1r6K9\nPIb86dmzJ61YsaLU7atXrxYUkyUWb968odGjR5O+vj73dKivr0+jRo2i9PR0uRwjOzubtm3bRs7O\nzqSurk4//fQTffr0iZeWiYnJN1v9+vVJU1OT1NXVeT2NZmVlka+vL6mqqlJgYKCocSbfC1FRUaSt\nrU2jR48mNTU18vf3p06dOpGmpqZULjG+9OnTp8Qpn7Vr15Kbmxtv3Q8fPlBWVpZUX0xMDLm6ugoa\nXbG0tORirwqPZK1evZqaNm3KW7cwiYmJVLNmTfL09OSKW1dmjIyM6OzZs0REXPwb0ZfYNb4pFoiI\nhg0bVqYmb4Tk/Nq2bRv17duXMjMz5WjRF8QcJZNIJFL/d+Fzm0g+BdDLA+ZkVUHq168vlRurKAkJ\nCWRkZCSXY4kR75Cfn09paWmUlpYmtwt6dHQ0jRw5knR0dMjOzo7Wrl1bbjmm8vLyaMGCBdSoUSOZ\n3hcVFUUWFhZkbW0tF+ehKhEfH09Dhgwha2trsrS0JE9PzxIXY/BBU1OzxLw8iYmJpKmpKbPekydP\nyN7enhQUFEhZWZkCAgIoMzOTBg8eTEpKSuTh4UGXLl3ibe/mzZupbt26FBoaSpqamrRr1y4KCgri\n/paV0qZOVVVVSUdHR65Tp2KhqanJLQCoW7cuXblyhYiIUlJSeH2HBRQsonF3d6fevXuX2ioTTZo0\nIW1tbdLS0iIbGxuys7OTakIwMTH56r1GCFXFyWIpHKogaWlpXy23oqSkhFevXvHWz8rKwtSpUxEW\nFobXr18X2y50+FYikch16bW1tTVevnyJQYMG4cKFC+Ve60pBQQFDhw7FypUrZXpf+/bt4efnhwUL\nFkhVuGcAtra236yrxxcDAwMcOHAAU6ZMkeo/ePAgDAwMZNabPn06Pn78iNWrV2Pfvn1YvXo1IiMj\n8eOPPyIxMbFYSgdZGTZsGHJzczF16lRkZWVh0KBBqFu3LlavXs0r7Ym8C1lXBAX5x4yNjWFlZYWw\nsDC0bNkSR44cEVSma/To0QgNDUVKSgp8fHzg5eUltxAGsRArJQkAzJ8/H7/++iu2bNkCDQ0NuWoX\nFOIu2ve9wWKyqiDm5uZYtmwZ3N3dS9y+f/9+TJ48mXdeqPKKd5AXCgoK0NTUhJKS0ld/pG/evClH\nq77N+fPnS8zFw/gSr/LgwQO8fPmyWJya0M8sJCQEw4cPh4uLCxeTFR0djfDwcGzatAne3t4y6dWt\nWxdhYWFo27YtXrx4AUNDQyxcuJBXPq9vkZ6ejvz8fNHyQ30vrFy5EoqKivDz88PZs2fRo0cP5OXl\nITc3FytWrBAUK/Tvv/9i//792Lx5My5duoQePXpg+PDh6NKly3fpBAjBzs4OycnJICKYmJgUe7jn\nm7gX+HLd7tatG/eAeeTIEXTo0AGampoAvnwP4eHhlT4mizlZVRBfX1+cO3cO165dKzF7esuWLeHs\n7FymwO2SqF+/PrZu3Yr27dtDR0cHN2/ehIWFBbZt24Zdu3bxyvguJmUd8fieiuH+l4mOjsagQYPw\n6NGjYlm95bUQ4MqVK1izZo1Uhn0/Pz+0atVKZi1FRUU8e/YMtWvXBgBoamri+vXrcgtETk1NRW5u\nbrFFJ0lJSVBWVoaJiYkgfTEd2vLi8ePHuH79OszNzfHjjz/KTffRo0cICQnB1q1bkZOTg7t378o1\n+F2efP78ucTvsH79+rw1586d+9Xtc+bM4a1duCD01wgODuZ9jPKAOVlVkLS0NDRt2hSKiooYP348\nGjZsCIlEgoSEBKxbtw55eXm4efMmatWqxUtfS0sLd+7cgbGxMerVq4f9+/ejZcuWSE1Nha2tLT5+\n/Cjn/4jB+D+aNGmCBg0aYO7cuSWuaNLV1a0gy0pGUVERL168QI0aNQBAakWkPHBycoKPj0+xh4Tt\n27dj06ZNOHfuHG/t8nBov2ceP36MkJAQhISE4PPnz7h3754gJysjIwN79+5FcnIypkyZgmrVqnHX\nar5VARITEzF8+HBcunRJqp+I2HdYDrCYrCpIrVq1cOnSpf/X3p3H1ZzvfwB/ndMmKSFShkiFLBNj\n50YRyRJmYazJLGLoMpixXcPMYFzXcsc1Rk0Txgwu2SYqa+RKY9TJiDYpW5ZSUTLqfH5/eHR+k0Jn\n69Q5r+fj0eNR3299zlvl9D6fz/vz/iAgIAALFixQPDlKJBIMHjwYmzZtUjnBArRX7/AyeXl5Whm3\nOjx58gTm5ua6DkOvpKamYs+ePXByctL6Yz158gTPnj0rd+3FtiivI4TAgAEDFOcrPnnyBMOHD69w\nXI2qSyvx8fHo06dPhes9e/bEJ598otKYZaZNm4auXbsiPDy80oS2JpLL5QgNDUVYWBiuX78OiUSC\nVq1a4Z133sHEiRPV/jf8dbkwJiYGw4YNw8aNG+Ht7Q2pVKryuImJiRg4cCDq16+P69ev48MPP0TD\nhg2xb98+ZGZmYtu2bSqNO2XKFBgbG+PXX3+tNT9DfcIkS085ODjg8OHDePjwIdLS0iCEgLOzs0r9\noF40ZcoUyGQy9OvXDwsWLMDQoUPx7bffKuod1PHNN9+gZcuWGDNmDADgvffew969e9G0aVMcPnxY\no1P9mjJjxgz85z//qXC9sLAQQ4cOVWsmgSrq0aMH0tLStJZkaXpjx4tLJr6+vmrF9yKJRIJHjx5V\nuJ6fn6/2LEV1JrSaIITAiBEjFM8VHTt2hBACV65cgZ+fH8LCwrB//36Vx58+fTp27tyJFi1aYMqU\nKdi5c6dKmyEqM2fOHPj5+WH16tXlzjAcMmQIxo0bp/K4CQkJ+P333zV27mnDhg2RkpICGxsbNGjQ\noFbVueoClwtJbZqsd3B0dMRPP/2E3r174+jRo3jvvfewa9cu7N69G1lZWYiKitJQ1Jrj7OyMMWPG\n4KuvvlJcKywshLe3NwDgzJkzao3v6emJsLCwCrN5BQUFGDlyJE6cOKHW+LVBYmKi4v309HQsXrwY\n8+bNq/TAWHV3j9a2jR3Dhg1D3bp18csvvygahJaWlmLMmDEoLCzEkSNHVB7b09MT8+fPV/wu13Q/\n/vgjAgMDceDAAXh4eJS7d+LECYwcORIbN27EpEmTVBpfKpWiRYsW6Ny58yuTi7CwMKXHrl+/Pi5e\nvIjWrVuXayqbmZmJNm3aoLi4WKWYu3XrhnXr1qFv374qff2Ltm7dirFjx8LMzAyhoaGv/D6wzpVJ\nFtUw5ubmSElJQfPmzREYGIji4mJ8//33SElJQY8ePfDw4UNdh1hBRkYG+vbti7lz52L27Nl49OgR\nBg8eDGNjYxw5ckSxG0ZVUqkU2dnZFXaM3bt3D82aNauwnKWPpFIpJBJJhbqgMmX3NFFjos2NHSUl\nJTh16hTS09Mxbtw4WFpa4vbt27CyslK5licpKQnu7u6wtrZWnOJw5swZFBQU4MSJE+jQoYPK8e7b\nt0+rCa2mDRo0CJ6eni/dublixQpER0cjMjJSpfH9/PyqtNymSjG2ra0tIiIi0Llz53JJVlRUFKZO\nnYobN25UeayCggLF+xcuXMDixYuxYsWKSn+Gyi5/k3K4XEhVosxOxFmzZqn8OA0aNMCNGzfQvHlz\nREREKGaHhBAaK9D8888/kZGRgdatWyvqZNTRqlUrREZGon///pBKpdi5cyfMzMwQHh6uVoL119mb\npKQkZGdnKz4uLS1FRESEysWwtU1GRka1PVZubq6iKN3Kykqx5NG3b18EBASoPG5mZia8vb2RlZWF\np0+fwsvLC5aWlli9ejWKi4uxefNmlcZ1dXVFYmIiNm7cCJlMBnNzc0yaNAmffPKJ2j2c3n77bQCA\nv7+/4pomE1pNS0xMxOrVq196f8iQISrvqgaet/fQFl9fXyxfvhy7d+8G8Pz7nJWVhc8//1zxc6gq\na2vrcslgWV3gX2niZ/ji0TdlcnJy0KRJkxr3+6ELTLKoSqraSFMikaiVZI0ePRrjxo2Ds7MzcnJy\nMGTIEADP6wrUrQspKirCzJkzFS0dUlJS4OjoiFmzZsHe3l6tvkUdOnTAr7/+ioEDB6JHjx749ddf\n1S54d3NzUzTk8/T0rHDf3Nwc3377rVqPUVs4ODjA398fGzZsKFevog3a2tgRGBiIrl27QiaTlavj\nGTVqFD744AO1Yi7rvaVp1ZncakJubu4rN/XY2trWyNlwAFizZg18fHzQpEkTPHnyBP369UN2djZ6\n9eqFr7/+WqmxTp48qaUoy3vZzPLTp08rbOwwVEyyqEqq68l23bp1aNmyJW7cuIHVq1crllDu3LmD\n6dOnqzX2ggULIJPJcOrUqXI1JgMHDsTSpUuVSrJeVpNhZmaG27dvl9vtpequsYyMDAgh4OjoiLi4\nOEULAAAwNTVFkyZNavQhvZq2detWrFq1SutJlrY2dsTExODs2bMV/vg4ODjg1q1basWcl5eHuLi4\nSvsgqVp/VBZbbVJaWvrK2WkjIyOUlJRUY0RVZ2VlhZiYGJw4cQIXL16EXC5Hly5dMHDgQKXH6tev\nnxYi/H9ls4ESiQTBwcHllrpLS0tx+vRpjRXa13ZMsqhGMTExwdy5cytc//vf/6722Pv378euXbvQ\ns2fPcgmSq6sr0tPTlRpLm0dVlCn7A/fiH01DVV3lo7Nnz1a87+HhgatXryo2dtjY2Kg8rlwur3T5\n5ObNm2oljocOHcL48eNRWFgIS0vLcr/bEolE6STr4MGDGDJkCExMTHDw4MFXfu6IESNUillbhBDw\n8/N76TFUT58+reaIlOfp6amYuc7Ly9PImHl5efjhhx9w5coVSCQSuLq6wt/fX+WecmUrG0IIbN68\nudyLPVNTU7Rs2VLl5W99w8J3UkpqaioSExPRpUsXtGrVCuHh4fjmm2/w5MkTjBw5EgsXLlSrD8vL\nntQlEgnq1KkDJycnlZs41q1bF3/88QccHR3LFZbKZDK4u7sjPz9f5bi1LSUlBadOnap0puIf//iH\njqKqXlKpFHfv3i03o1ddsrOz8fXXXyM4OBhPnjxRaYwxY8agfv362LJli6IhaePGjeHr64sWLVqo\n3LnaxcUFPj4+WLFihUbOj/vrRotX9X2qiTVZtblLuLba11y4cAGDBw+Gubk5unfvDiEELly4gCdP\nniAqKgpdunRROWYPDw+EhYVppDWQ3tL2CdSkP8LCwoSxsbEwNTUVZmZmYuvWrcLMzEx4e3uLoUOH\nCmNjY7Fq1Sq1HkMikQipVCokEkm5t7JrUqlUuLu7i9zcXKXHdnd3F//+97+FEM9PdL927ZoQQogZ\nM2aIwYMHqxxzXFyciI2NrXA9NjZW/PbbbyqPW2bLli3CyMhI2NraijfffFO4ubkp3jp37qz2+LWF\nRCIR1tbWokGDBq98U9XDhw/FuHHjhI2NjbCzsxMbNmwQpaWlYsmSJcLc3Fx07dpV/PzzzyqPf+vW\nLeHi4iLatWsnjI2NRc+ePUWjRo1EmzZtxN27d1Uet27duiI9PV3lr6eaoVWrVuLs2bNCCCGioqKE\ntbW1iIyMFFOnThVeXl4qj9u3b1/h5+cnnj17prj27NkzMXnyZPG3v/1N7bj/qqSkRMTHx6v0/Kyv\nmGRRlb311lti4cKFQi6Xi5CQEGFubi7WrVunuP/999+Ltm3bqvUYx44dEz169BDHjh0TBQUFoqCg\nQBw7dkz07NlThIeHi5iYGNG+fXvh7++v9Nhnz54VlpaWYtq0aaJOnToiMDBQDBw4UFhYWIgLFy6o\nHHO3bt3Ef//73wrX9+7dK7p3767yuGVatGihdvKqDyQSidiwYYMIDQ195ZuqAgICxBtvvCE+/fRT\n0b59eyGVSsWQIUOEh4eHOHXqlEb+DUVFReKHH34QM2bMEAEBASIoKEgUFRWpNeaoUaPErl27NBJf\nVWVlZYkpU6ZU62Pquzp16oisrCwhhBCzZs0SH330kRBCiOTkZGFtba3WuFeuXKlw/fLly8Lc3Fzl\ncYUQIjAwUAQHBwshnidYvXv3FhKJRFhYWIiTJ0+qNba+YJJFVVavXj2RlpYmhBCitLRUGBkZiUuX\nLinuZ2RkqP2ftn379opXc38VExMjXF1dhRBCHD16VDRv3lyl8RMTE8WkSZNE+/btRbt27cT48eNF\nYmKiWjFbWFhUOpNw7do1Ua9ePbXGFkIIS0tLzlSI50mWOjM+r9OiRQtx9OhRIYQQ6enpQiKRiMDA\nQK09nqYEBweLFi1aiKVLl4o9e/aIAwcOlHvThoSEBCGVSrUytqGys7NTPPe5uLiI3bt3CyGEuHr1\nqrC0tFR53CZNmojIyMgK1yMiIkSTJk1UHlcIIezt7RWz9fv27RP29vYiOTlZLFq0SPTu3VutsfUF\nC9+pysoKa4HndRvm5ublakDMzc3VLixNT0+vtDmelZUVrl27BuB5h/UHDx6oNH7Hjh0VLRw0xczM\nDHfv3oWjo2O563fu3NFIH653330XUVFRmDZtmtpj1WbaPnPt9u3bcHV1BfC8jUOdOnXUbq3wIm3U\n1n344YcAgOXLl1e4VxPrpqhy2mpfM2bMGEydOhVr1qxB7969IZFIEBMTg3nz5uH9999XK+acnBw0\nbdoUAHD48GG8++67cHFxwdSpU9XqR6ZPmGRRlZX1bHrZx5rw1ltvYd68edi2bZuiwPn+/fuYP38+\nunXrBuB58f0bb7yh0vhyuRxpaWmV/pFzd3dXaUwvLy8sWLAABw4cUOzWycvLw8KFC+Hl5aXSmH99\ngnJycsKSJUsQGxtbacdmdfqS1SZCy3t05HJ5ue+tkZGR2t36/yooKAgBAQGwsbFB06ZNK/xfUjXJ\n4u5T/aCt9jVr1qxR7DItKSmBEAKmpqYICAjAqlWr1IrZ1tYWSUlJsLOzQ0REBDZt2gTgeU9CQ2ov\n8yrcXUhVJpVKUb9+fcUfh7y8PFhZWSl2IAkhUFBQoNYr5+TkZPj6+iIjIwPNmzdXdD12dHTEgQMH\n4OLigv379+PRo0eYOHGiUmPHxsZi3LhxyMzMrPAHW51X/Ldu3YK7uztycnLQuXNnAM9ffdra2uLo\n0aNo3ry50mNWdQelRCJRzPCReqRSKYYMGaLY/n/o0CF4enpWSLRUOZcOeN6SY/r06fjss8/UjlXX\nZDIZunTpwlmyWqSoqAjp6ekQQsDJyUkjO1G/+OILrF+/HnZ2digqKkJKSgrMzMwQEhKCoKAgnDt3\nTgOR125MsqjKqrrMpu6hoEIIREZGIiUlBUIItG3bFl5eXq/cTl4Vbm5ucHFxwbJly2BnZ1dhFk7V\nnjHA86XUHTt2KI416dSpE95///0Ks05Uc2l7+7+VlRUSEhIqLCtrQmFhIaKjo5GVlYU///yz3D1V\nZjpHjx79yvt5eXmIjo5mkqUmbfYke93PEACMjY3RtGlTeHl5Yfjw4UqNX2bPnj24ceMG3n33XcUK\nw9atW2FtbQ1fX1+VxtQnTLLIYFhYWEAmk6l9PA+RKqZOnYpu3bppvLYuPj4ePj4+KCoqQmFhIRo2\nbIgHDx6gbt26aNKkiUoznbW531Rtos2eZFX5Gcrlcty7dw/R0dGYO3dupXV9pB4mWVTjHD9+HMeP\nH6+0biokJETlcT09PTF//vxyR+poUlJSUqUzCep2xZ4zZ06l1//aoNXX11ftw4BJu1auXIm1a9fC\nx8cHnTp10lhtXf/+/eHi4oLvvvsO1tbWkMlkMDExwYQJExAYGFilGQ0ybOHh4QgICEBWVpZSX/e6\npMxQGiW/CpMsqlGWLVuG5cuXo2vXrpUu6e3bt0+p8RITExXvp6enY/HixZg3b16lBeSdOnVSKeZr\n165h1KhRuHTpEiQSiaLeqyx2dZdUPDw8cPHiRZSWlqJNmzYQQiA1NRVGRkZo27YtkpOTFTuGynbH\nUc3zqjo7dWrrrK2tcf78ebRp0wbW1tY4d+4c2rVrh/Pnz2Py5Mm4evWqqiFTDXHr1i00a9ZMa+Pn\n5eXB399f6XrDshrUMs+ePUNGRgaMjY3RunVrlc9t1SvV3DKC6JWaNm0qtm3bprHxXtZBvrJO8qoa\nNmyY8PX1Fffu3RP16tUTSUlJ4syZM6J79+7i9OnTav8b1q1bJ0aPHi3y8/MV1/Lz88U777wj1q9f\nLwoLC4Wvr68YNGiQ2o9F2nf//n3x4MEDjY1nY2MjkpOThRDP+ytFREQIIYS4cuWK2n3rSLfu3Lkj\nPvnkE1GnTh1dh1Jl+fn5YtSoURp9Hq/NmGRRjdKwYUNFw1NNuH79epXfVNWoUSMhk8mEEEJYWVmJ\nq1evCiGEOH78uHBzc1P732Bvby8uX75c4foff/wh7O3thRBC/P7776JRo0ZqPxZpx8OHD8X06dNF\no0aNhFQqFVKpVDRq1EjMmDFD5OXlqTW2l5eX2LFjhxBCiI8//lh0795d/PTTT2Lw4MEaOXGAtEvb\nxznpwqVLl4SDg4Ouw6gR2CeLVPbnn38iIyMDrVu31kjTTQD44IMP8PPPP2PJkiUaGc/BwQH+/v7Y\nsGGDopGqppWWlip62tjY2OD27dto06YNHBwckJycrPb4+fn5uHfvXoWlwPv376OgoADA8yWjF2vB\nqGbIzc1Fr169cOvWLYwfPx7t2rWDEAJXrlxBaGgojh8/jv/9738qH7K7YsUKPHr0CADw5ZdfYvLk\nyQgICICTkxML02uBhQsX4vTp05g8eTIiIiIwe/ZsREREoLi4GEeOHEG/fv10HaLS8vLykJ+fr+sw\nagQmWaS0oqIizJw5U9HSISUlBY6Ojpg1axbs7e3x+eefqzx2cXExtmzZgmPHjlVaHLx27Vqlx9y6\ndStWrVqltSSrQ4cOSExMhKOjI3r06IHVq1fD1NQUW7Zs0ch2fV9fX/j7++Nf//oXunXrBolEgri4\nOMydOxcjR44EAMTFxcHFxUXtxyLNW758OUxNTZGeng5bW9sK9wYNGoTly5dj3bp1Ko3ftWtXxfuN\nGzfG4cOH1YqXqld4eDh+/PFHDBw4ENOnT4eTkxNcXFywfv16XYf2Wi92dRdC4M6dO9i+fbvWNhjV\nNix8J6UFBgbi7NmzWL9+Pby9vRUJxsGDB7F06VLEx8erPLaHh8dL70kkEpw4cULpMf+6TVobIiMj\nUVhYiNGjRyM9PR3Dhw/H1atX0ahRI+zcuRMDBgxQa/zHjx9j9uzZ2LZtG0pKSgA8728zefJkrFu3\nDhYWFkhISADwvBcY1SwtW7bE999/j8GDB1d6PyIiAtOmTcP169erNzCqEUxMTJCZmQl7e3sAQN26\ndREXF4cOHTroOLLXe3Ezh1QqRePGjeHp6YkFCxZo7YVtbcIki5Tm4OCAXbt2oWfPnrC0tIRMJoOj\noyPS0tLQpUsXxRJWTSGVSnH37l3FMT3VITc3Fw0aNNDosUOPHz/GtWvXIIRA69atFUuUVLOZmZkh\nPT39pUdB3bx5E05OTiguLq7ymF26dMHx48fRoEEDdO7c+ZW/Z9zhVbMZGRkhOztb8fxkaWmJxMTE\nKp/6QDUblwtJaffv3690VqiwsFDrh/iqysXF5bWx5ebmKjVmdXVULlOvXj2V20yQ7tjY2OD69esv\nTbIyMjLQqFEjpcb09fVVHP9TtmRMtZMQAn5+foqfZ3FxMaZNm6ax45y0obqf+2ozJlmktG7duiE8\nPBwzZ84E8P/9oIKCgtCrVy+lxxs9ejRCQ0NhZWX12v+8qj7RLFu2TK1jcypTlfHkcjlSU1MRHBys\nVEfl6vieUPXw9vbGokWLcPToUZiampa79/TpUyxZskTp+pWlS5dW+j7VPi8eQzZhwgQdRVJ12nzu\n0zdMskhpK1euhLe3N5KSklBSUoINGzbg8uXLOHfuHKKjo5Ue76+HTms6ESozduxYjddkKbNzq6yj\nclWfaKrje0LVY9myZejatSucnZ0xY8YMtG3bFsDzEwI2bdqEp0+fYvv27TqOknSlNu4A1eZzn75h\nTRap5NKlS1izZg1+//13yOVydOnSBZ999hk6duyotccsKCiAlZWV0l9nZGSEO3fuaK3wvSpU7ahM\n+iEjIwPTp09HVFRUuRMBvLy8sHHjRqXP01Sm3k/ZZXAiTTL05z4mWVQjrFmzBnPnzn3p/YKCAgwa\nNAixsbFKj63t3YXaFhQUhP79+8PZ2VnXoZCaHj58iNTUVACAk5OTyudNlrVPqYoXl6OIqPowySKV\nyOVypKWlVXqIs7u7u9LjmZubY9OmTZWeHP/o0SMMGjQI+fn5SEpKUjnm2qpt27ZISUlB06ZN0a9f\nP/Tv3x/9+vVTLDsREVHNxCSLlBYbG4tx48YhMzMTL/76SCQSlQ5E3rNnDyZOnIhffvml3G6px48f\nY9CgQcjJycHp06crNHM0FNnZ2Th58iSio6Nx6tQppKamonHjxujfvz927typ6/CominTJkWVJXYi\n0kWS/0kAAAsYSURBVAwmWaQ0Nzc3uLi4YNmyZbCzs6tQG6JqoXZwcDBmzZqF8PBweHh44PHjx/D2\n9sa9e/cQHR0NOzs7TYRfqxUWFiImJgY7d+7ETz/9BCGEokEpGQ6pVPramiwhhMoveohIM7i7kJSW\nmpqKPXv2KF2s+zoffPABcnNzMXLkSBw4cABLlixBdna2wSdYR44cUcxgyWQytG/fHu7u7ti7dy/+\n9re/6To80oGTJ0/qOgQiqgImWaS0Hj16IC0tTeNJFgDMnz8fDx8+xIABA9CyZUtER0ejWbNmGn+c\n2mTo0KFo3LgxPv30U0RGRrKlA1X50OCy45aISDe4XEhVkpiYqHg/PT0dixcvxrx589CxY8cKhzir\n0pX8xYabhw8fxptvvlkhwdLUNuCbN2/C3t4eUqlUI+Np0/r163H69GmcOXMGRkZGiuL3/v37o127\ndroOj2qY/Px87NixA8HBwZDJZFwuJNIhJllUJWU1IC/7dSm7p2oNSGW7CiujqcZ9VlZWSEhIgKOj\no0bGqy6XLl1CdHQ0Tp48iUOHDqFRo0a4c+eOrsOiGuDEiRMICQlBWFgYHBwc8Pbbb+Ptt99G586d\ndR0akcHiciFVSUZGhlbHr+6ux7XxtUV8fDxOnTqFkydP4syZM5DL5S89D48Mw82bNxEaGoqQkBAU\nFhbivffew7Nnz7B37164urrqOjwig8eZLKoyf39/bNiwAZaWlroORW2WlpaQyWS1YiZrxIgRiImJ\nQUFBAdzc3BRLhe7u7tyeb8B8fHwQExODYcOGYfz48fD29oaRkRFMTEwgk8mYZBHVAJzJoirbunUr\nVq1aVSuTrNOnT5f7uLS0FHFxcbh586bimipNVKuDi4sLPvroIyZVVE5UVBRmzZqFgIAAngZAVENx\nJouqrDYfT9OqVatyH2dlZcHe3h7Gxs9fZ0gkEly7dk0XoRGp5Ny5cwgJCcHu3bvRtm1bTJw4EWPG\njIG9vT1nsohqCCZZVGVSqRR3795F48aNdR2K2mrLcqFcLkdoaCjCwsJw/fp1SCQStGrVCu+88w4m\nTpxY5UOCSX8VFRVh586dCAkJQVxcHEpLS7F27Vr4+/vXyllnIn3CJIuqTCqVon79+q/9w56bm1tN\nEamuNiRZQggMHz5c0c6ibdu2EELgypUruHTpEkaMGIH9+/frOkyqQZKTk/HDDz9g+/btyMvLg5eX\nFw4ePKjrsIgMFmuySCnLli1jM8xqEhoaitOnT+P48ePw8PAod+/EiRMYOXIktm3bhkmTJukoQqpp\n2rRpg9WrV2PlypU4dOgQQkJCdB0SkUHjTBZVWW2uyXpRQEAAvvzyS9jY2Og6lJcaNGgQPD098fnn\nn1d6f8WKFYiOjkZkZGQ1R0ZERFXBJIuqzMjICHfu3NGLJKs2aNq0KSIiIuDm5lbp/fj4eAwZMgTZ\n2dnVHBkREVVFzT9ThGoM5uPVKzc3F7a2ti+9b2tri4cPH1ZjREREpAzWZFGVyeVyXYdgUEpLSxUt\nJipjZGSEkpKSaoyIiIiUwSSLqIYSQsDPzw9mZmaV3n/69Gk1R0RERMpgkkVUQ02ePPm1n8OdhURE\nNRcL34mIiIi0gIXvZFDOnDmDCRMmoFevXrh16xYAYPv27YiJidFxZEREpG+YZJHB2Lt3LwYPHgxz\nc3PEx8crapoePXqEFStW6Dg6IiLSN0yyyGB89dVX2Lx5M4KCgmBiYqK43rt3b1y8eFGHkRERkT5i\nkkUGIzk5Ge7u7hWuW1lZIS8vTwcRERGRPmOSRQbDzs4OaWlpFa7HxMTU6IOiiYiodmKSRQbj448/\nRmBgIM6fPw+JRILbt29jx44dmDt3LqZPn67r8IiISM+whQMZlEWLFmHdunUoLi4GAJiZmWHu3Ln4\n8ssvdRwZERHpGyZZZHCKioqQlJQEuVwOV1dX1KtXT9chERGRHmKSRQYjPz8fpaWlaNiwYbnrubm5\nMDY2hpWVlY4iIyIifcSaLDIYY8eOxc6dOytc3717N8aOHauDiIiISJ9xJosMRsOGDXH27Fm0a9eu\n3PWrV6+iT58+yMnJ0VFkRESkjziTRQbj6dOnKCkpqXD92bNnePLkiQ4iIiIifcYkiwxGt27dsGXL\nlgrXN2/ejLfeeksHERERkT4z1nUARNXl66+/xsCBAyGTyTBgwAAAwPHjx/Hbb78hKipKx9EREZG+\nYU0WGZSEhAT885//REJCAszNzdGpUycsWLAAzs7Oug6NiIj0DJMsIiIiIi3gciEZFLlcjrS0NNy7\ndw9yubzcvcoOjyYiIlIVkywyGLGxsRg3bhwyMzPx4gSuRCJBaWmpjiIjIiJ9xOVCMhhubm5wcXHB\nsmXLYGdnB4lEUu5+/fr1dRQZERHpIyZZZDAsLCwgk8ng5OSk61CIiMgAsE8WGYwePXogLS1N12EQ\nEZGBYE0WGYyZM2fi008/RXZ2Njp27AgTE5Ny9zt16qSjyIiISB9xuZAMhlRaceJWIpFACMHCdyIi\n0jjOZJHByMjI0HUIRERkQDiTRURERKQFLHwng7J9+3b06dMH9vb2yMzMBACsX78eBw4c0HFkRESk\nb5hkkcH47rvvMGfOHPj4+CAvL09Rg2VtbY3169frODoiItI3TLLIYHz77bcICgrCokWLYGRkpLje\ntWtXXLp0SYeRERGRPmKSRQYjIyMDnTt3rnDdzMwMhYWFOoiIiIj0GZMsMhitWrVCQkJChetHjhyB\nq6urDiIiIiJ9xhYOZDDmzZuHGTNmoLi4GEIIxMXF4ZdffsHKlSsRHBys6/CIiEjPsIUDGZSgoCB8\n9dVXuHHjBgCgWbNm+OKLLzB16lQdR0ZERPqGSRYZBCEEsrKy0KRJE5ibm+PBgweQy+Vo0qSJrkMj\nIiI9xSSLDIJcLkedOnVw+fJlODs76zocIiIyACx8J4MglUrh7OyMnJwcXYdCREQGgkkWGYzVq1dj\n3rx5+OOPP3QdChERGQAuF5LBaNCgAYqKilBSUgJTU1OYm5uXu5+bm6ujyIiISB+xhQMZDB6dQ0RE\n1YkzWURERERawJksMiilpaXYv38/rly5AolEAldXV4wYMaLcWYZERESawCSLDEZaWhp8fHxw69Yt\ntGnTBkIIpKSkoHnz5ggPD0fr1q11HSIREekRLheSwfDx8YEQAjt27EDDhg0BADk5OZgwYQKkUinC\nw8N1HCEREekTJllkMCwsLBAbG4uOHTuWuy6TydCnTx88fvxYR5EREZE+Yp8sMhhmZmZ49OhRheuP\nHz+GqampDiIiIiJ9xiSLDMawYcPw0Ucf4fz58xBCQAiB2NhYTJs2DSNGjNB1eEREpGe4XEgGIy8v\nD5MnT8ahQ4dgYmICACgpKcGIESMQGhqK+vXr6zhCIiLSJ0yyyOCkpqbi6tWrEELA1dUVTk5Oug6J\niIj0EJMsIiIiIi1gnyzSa3PmzKny565du1aLkRARkaFhkkV6LT4+vkqfJ5FItBwJEREZGi4XEhER\nEWkBWziQ3rt27Rr4WoKIiKobkyzSe87Ozrh//77i4zFjxuDu3bs6jIiIiAwBkyzSey/OYh0+fBiF\nhYU6ioaIiAwFkywiIiIiLWCSRXpPIpFU2D3I3YRERKRtbOFAek8IAT8/P5iZmQEAiouLMW3aNFhY\nWJT7vLCwMF2ER0REeopJFum9yZMnl/t4woQJOoqEiIgMCftkEREREWkBa7KIiIiItIBJFhEREZEW\nMMkiIiIi0gImWURERERawCSLiIiISAuYZBERERFpAZMsIiIiIi1gkkVERESkBUyyiIiIiLTg/wDQ\nVG2NIUURyAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f92eb1e7f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#按歌手来统计其播放总量\n",
    "popular_artist = triplet_dataset_sub_song_merged[['artist_name','listen_count']].groupby('artist_name').sum().reset_index()\n",
    "#排序\n",
    "popular_artist_top_20 = popular_artist.sort_values('listen_count', ascending=False).head(n=20)\n",
    "\n",
    "objects = (list(popular_artist_top_20['artist_name']))\n",
    "y_pos = np.arange(len(objects))\n",
    "performance = list(popular_artist_top_20['listen_count'])\n",
    "#绘图 \n",
    "plt.bar(y_pos, performance, align='center', alpha=0.5)\n",
    "plt.xticks(y_pos, objects, rotation='vertical')\n",
    "plt.ylabel('Item count')\n",
    "plt.title('Most popular Artists')\n",
    " \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 用户播放过歌曲量的分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T14:55:04.690241Z",
     "start_time": "2017-09-24T14:54:59.848292Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    99996.000000\n",
       "mean       107.749890\n",
       "std         79.742561\n",
       "min          1.000000\n",
       "25%         53.000000\n",
       "50%         89.000000\n",
       "75%        141.000000\n",
       "max       1189.000000\n",
       "Name: title, dtype: float64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_song_count_distribution = triplet_dataset_sub_song_merged[['user','title']].groupby('user').count().reset_index().sort_values(\n",
    "by='title',ascending = False)\n",
    "user_song_count_distribution.title.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-24T15:11:28.003535Z",
     "start_time": "2017-09-24T15:11:27.461150Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f9c605bac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = user_song_count_distribution.title\n",
    "n, bins, patches = plt.hist(x, 50, facecolor='green', alpha=0.75)\n",
    "plt.xlabel('Play Counts')\n",
    "plt.ylabel('Num of Users')\n",
    "plt.title(r'$\\mathrm{Histogram\\ of\\ User\\ Play\\ Count\\ Distribution}\\ $')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绝大多数用户播放歌曲的数量在100左右，关于数据的处理和介绍已经给大家都分析过了，接下来我们要做的就是构建一个能实际进行推荐的程序了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始构建推荐系统"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import Recommenders as Recommenders\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 简单暴力，排行榜单推荐，对新用户来说解决冷启动问题\n",
    "\n",
    "最简单的推荐方式就是排行榜单了，这里我们创建了一个函数，需要我们传入的是原始数据，用户列名，待统计的指标（例如按歌曲名字，歌手名字，专辑名字。选择统计哪项指标得到的排行榜单）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song_merged_set = triplet_dataset_sub_song_merged\n",
    "train_data, test_data = train_test_split(triplet_dataset_sub_song_merged_set, test_size = 0.40, random_state=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1901799</th>\n",
       "      <td>28866ea8a809d5d46273cd0989c5515c660ef8c7</td>\n",
       "      <td>SOEYVHS12AB0181D31</td>\n",
       "      <td>1</td>\n",
       "      <td>Monster</td>\n",
       "      <td>The Fame Monster</td>\n",
       "      <td>Lady GaGa</td>\n",
       "      <td>2009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4815185</th>\n",
       "      <td>c9608a24a2a40e0ec38993a70532e7bb56eff22b</td>\n",
       "      <td>SOKIYKQ12A8AE464FC</td>\n",
       "      <td>2</td>\n",
       "      <td>Fight For Your Life</td>\n",
       "      <td>Made In NYC</td>\n",
       "      <td>The Casualties</td>\n",
       "      <td>2000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10513026</th>\n",
       "      <td>24f0b09c133a6a0fe42f097734215dceb468d449</td>\n",
       "      <td>SOETFVO12AB018DFF3</td>\n",
       "      <td>1</td>\n",
       "      <td>Free Style (feat. Kevo_ Mussilini &amp; Lyrical 187)</td>\n",
       "      <td>A Bad Azz Mix Tape</td>\n",
       "      <td>Z-RO</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2659073</th>\n",
       "      <td>4da3c59a0af73245cea000fd5efa30384182bfcb</td>\n",
       "      <td>SOAXJOU12A6D4F6685</td>\n",
       "      <td>1</td>\n",
       "      <td>Littlest Things</td>\n",
       "      <td>Alright_ Still</td>\n",
       "      <td>Lily Allen</td>\n",
       "      <td>2006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5506263</th>\n",
       "      <td>b46c5ed385cad7ecea8af6214f440d19de6eb6c2</td>\n",
       "      <td>SOXBCAY12AB0189EE0</td>\n",
       "      <td>1</td>\n",
       "      <td>La trama y el desenlace</td>\n",
       "      <td>Amar la trama</td>\n",
       "      <td>Jorge Drexler</td>\n",
       "      <td>2010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              user                song  \\\n",
       "1901799   28866ea8a809d5d46273cd0989c5515c660ef8c7  SOEYVHS12AB0181D31   \n",
       "4815185   c9608a24a2a40e0ec38993a70532e7bb56eff22b  SOKIYKQ12A8AE464FC   \n",
       "10513026  24f0b09c133a6a0fe42f097734215dceb468d449  SOETFVO12AB018DFF3   \n",
       "2659073   4da3c59a0af73245cea000fd5efa30384182bfcb  SOAXJOU12A6D4F6685   \n",
       "5506263   b46c5ed385cad7ecea8af6214f440d19de6eb6c2  SOXBCAY12AB0189EE0   \n",
       "\n",
       "          listen_count                                             title  \\\n",
       "1901799              1                                           Monster   \n",
       "4815185              2                               Fight For Your Life   \n",
       "10513026             1  Free Style (feat. Kevo_ Mussilini & Lyrical 187)   \n",
       "2659073              1                                   Littlest Things   \n",
       "5506263              1                           La trama y el desenlace   \n",
       "\n",
       "                     release     artist_name  year  \n",
       "1901799     The Fame Monster       Lady GaGa  2009  \n",
       "4815185          Made In NYC  The Casualties  2000  \n",
       "10513026  A Bad Azz Mix Tape            Z-RO     0  \n",
       "2659073       Alright_ Still      Lily Allen  2006  \n",
       "5506263        Amar la trama   Jorge Drexler  2010  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def create_popularity_recommendation(train_data, user_id, item_id):\n",
    "    #根据指定的特征来统计其播放情况，可以选择歌曲名，专辑名，歌手名\n",
    "    train_data_grouped = train_data.groupby([item_id]).agg({user_id: 'count'}).reset_index()\n",
    "    #为了直观展示，我们用得分来表示其结果\n",
    "    train_data_grouped.rename(columns = {user_id: 'score'},inplace=True)\n",
    "    \n",
    "    #排行榜单需要排序\n",
    "    train_data_sort = train_data_grouped.sort_values(['score', item_id], ascending = [0,1])\n",
    "    \n",
    "    #加入一项排行等级，表示其推荐的优先级\n",
    "    train_data_sort['Rank'] = train_data_sort['score'].rank(ascending=0, method='first')\n",
    "        \n",
    "    #返回指定个数的推荐结果\n",
    "    popularity_recommendations = train_data_sort.head(20)\n",
    "    return popularity_recommendations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "recommendations = create_popularity_recommendation(triplet_dataset_sub_song_merged,'user','title')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到推荐结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>score</th>\n",
       "      <th>Rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>19601</th>\n",
       "      <td>Sehr kosmisch</td>\n",
       "      <td>18626</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5797</th>\n",
       "      <td>Dog Days Are Over (Radio Edit)</td>\n",
       "      <td>17635</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27332</th>\n",
       "      <td>You're The One</td>\n",
       "      <td>16085</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19563</th>\n",
       "      <td>Secrets</td>\n",
       "      <td>15138</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18653</th>\n",
       "      <td>Revelry</td>\n",
       "      <td>14945</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25087</th>\n",
       "      <td>Undo</td>\n",
       "      <td>14687</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7547</th>\n",
       "      <td>Fireflies</td>\n",
       "      <td>13085</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9659</th>\n",
       "      <td>Hey_ Soul Sister</td>\n",
       "      <td>12993</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25233</th>\n",
       "      <td>Use Somebody</td>\n",
       "      <td>12793</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9940</th>\n",
       "      <td>Horn Concerto No. 4 in E flat K495: II. Romanc...</td>\n",
       "      <td>12346</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24308</th>\n",
       "      <td>Tive Sim</td>\n",
       "      <td>11831</td>\n",
       "      <td>11.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3647</th>\n",
       "      <td>Canada</td>\n",
       "      <td>11598</td>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23485</th>\n",
       "      <td>The Scientist</td>\n",
       "      <td>11529</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4211</th>\n",
       "      <td>Clocks</td>\n",
       "      <td>11357</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12152</th>\n",
       "      <td>Just Dance</td>\n",
       "      <td>11058</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26992</th>\n",
       "      <td>Yellow</td>\n",
       "      <td>10919</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16455</th>\n",
       "      <td>OMG</td>\n",
       "      <td>10818</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9863</th>\n",
       "      <td>Home</td>\n",
       "      <td>10512</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3312</th>\n",
       "      <td>Bulletproof</td>\n",
       "      <td>10383</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4777</th>\n",
       "      <td>Creep (Explicit)</td>\n",
       "      <td>10246</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   title  score  Rank\n",
       "19601                                      Sehr kosmisch  18626   1.0\n",
       "5797                      Dog Days Are Over (Radio Edit)  17635   2.0\n",
       "27332                                     You're The One  16085   3.0\n",
       "19563                                            Secrets  15138   4.0\n",
       "18653                                            Revelry  14945   5.0\n",
       "25087                                               Undo  14687   6.0\n",
       "7547                                           Fireflies  13085   7.0\n",
       "9659                                    Hey_ Soul Sister  12993   8.0\n",
       "25233                                       Use Somebody  12793   9.0\n",
       "9940   Horn Concerto No. 4 in E flat K495: II. Romanc...  12346  10.0\n",
       "24308                                           Tive Sim  11831  11.0\n",
       "3647                                              Canada  11598  12.0\n",
       "23485                                      The Scientist  11529  13.0\n",
       "4211                                              Clocks  11357  14.0\n",
       "12152                                         Just Dance  11058  15.0\n",
       "26992                                             Yellow  10919  16.0\n",
       "16455                                                OMG  10818  17.0\n",
       "9863                                                Home  10512  18.0\n",
       "3312                                         Bulletproof  10383  19.0\n",
       "4777                                    Creep (Explicit)  10246  20.0"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recommendations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "返回了一份前20的歌曲排行榜单，其中的得分这里只是进行了简单的播放计算，在设计的时候也可以综合考虑更多的指标，比如综合计算歌曲发布年份，歌手的流行程度等。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 基于歌曲相似度的推荐"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来就要进行相似度的计算来推荐歌曲了，为了加快代码的运行速度，选择了其中一部分数据来进行实验。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "song_count_subset = song_count_df.head(n=5000)\n",
    "user_subset = list(play_count_subset.user)\n",
    "song_subset = list(song_count_subset.song)\n",
    "triplet_dataset_sub_song_merged_sub = triplet_dataset_sub_song_merged[triplet_dataset_sub_song_merged.song.isin(song_subset)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "      <td>You And Me Jesus</td>\n",
       "      <td>Tribute To Jake Hess</td>\n",
       "      <td>Jake Hess</td>\n",
       "      <td>2004</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "      <td>Harder Better Faster Stronger</td>\n",
       "      <td>Discovery</td>\n",
       "      <td>Daft Punk</td>\n",
       "      <td>2007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Muse</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "      <td>Breakfast At Tiffany's</td>\n",
       "      <td>Home</td>\n",
       "      <td>Deep Blue Something</td>\n",
       "      <td>1993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "      <td>Lucky (Album Version)</td>\n",
       "      <td>We Sing.  We Dance.  We Steal Things.</td>\n",
       "      <td>Jason Mraz &amp; Colbie Caillat</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82            12   \n",
       "1  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D             1   \n",
       "2  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239             1   \n",
       "3  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50             1   \n",
       "4  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36             7   \n",
       "\n",
       "                           title                                release  \\\n",
       "0               You And Me Jesus                   Tribute To Jake Hess   \n",
       "1  Harder Better Faster Stronger                              Discovery   \n",
       "2                       Uprising                               Uprising   \n",
       "3         Breakfast At Tiffany's                                   Home   \n",
       "4          Lucky (Album Version)  We Sing.  We Dance.  We Steal Things.   \n",
       "\n",
       "                   artist_name  year  \n",
       "0                    Jake Hess  2004  \n",
       "1                    Daft Punk  2007  \n",
       "2                         Muse     0  \n",
       "3          Deep Blue Something  1993  \n",
       "4  Jason Mraz & Colbie Caillat     0  "
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged_sub.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 计算相似度得到推荐结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import Recommenders as Recommenders\n",
    "train_data, test_data = train_test_split(triplet_dataset_sub_song_merged_sub, test_size = 0.30, random_state=0)\n",
    "is_model = Recommenders.item_similarity_recommender_py()\n",
    "is_model.create(train_data, 'user', 'title')\n",
    "user_id = list(train_data.user)[7]\n",
    "user_items = is_model.get_user_items(user_id)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "心的同学应该观察到了，我们首先导入了Recommenders，像是一个自定义的工具包，这里就包括了我们接下来要使用的所有函数，由于接下来进行计算的代码量较大，直接在notebook中进行展示比较麻烦，所有我们自己写了一个.py文件，所有的实际计算操作都在这里完成了。\n",
    "大家在实践这份代码的时候，可以选择一个合适的IDE，因为notebook并不支持debug操作。拿到了一份陌生的代码而且量又比较大的时候，最好先通过debug的方式一行代码一行代码来执行，这样可以更清晰的熟悉整个函数做了一件什么事，如果直接看整体对于初学的同学们来说可能会有点难度，建议大家选择一个趁手的IDE例如pycharm,eclipse等都是不错的。"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "整体的代码量还是比较多，我先从整体上介绍这段代码做了一件什么事，大家在自己玩的时候最好按照我之前说的还是debug一遍更舒服。首先我们要针对某一个用户进行推荐，那必然得先得到他都听过哪些歌曲，通过这些已被听过的歌曲跟整个数据集中的歌曲进行对比，看哪些歌曲跟用户已听过的比较类似，推荐的就是这些类似的。如何计算呢？例如当前用户听过了66首歌曲，整个数据集中有4879个歌曲，我们要做的就是构建一个[66,4879]的矩阵，其中每一个值表示用户听过的每一个歌曲和数据集中每一个歌曲的相似度。这里使用Jaccard相似系数，矩阵中[i,j]的含义就是用户听过的第i首歌曲这些歌曲被哪些人听过，比如有3000人听过，数据集中的j歌曲被哪些人听过，比如有5000人听过。Jaccard相似系数就要求：\n",
    "\n",
    "![image.png](./image.png)\n",
    "\n",
    "说白了就是如果两个歌曲很相似，那其受众应当是一致的，交集/并集的比例应该比较大，如果两个歌曲没啥相关性，其值应当就比较小了。\n",
    "上述代码中计算了矩阵[66,4879]中每一个位置的值应当是多少，在最后推荐的时候我们还应当注意一件事对于数据集中每一个待推荐的歌曲都需要跟该用户所有听过的歌曲计算其Jaccard值，例如歌曲j需要跟用户听过的66个歌曲计算其值，最终是否推荐的得分值还得进行处理，即把这66个值加在一起，最终求一个平均值，来代表该歌曲的推荐得分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No. of unique songs for the user: 66\n",
      "no. of unique songs in the training set: 4879\n",
      "Non zero values in cooccurence_matrix :290327\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>song</th>\n",
       "      <th>score</th>\n",
       "      <th>rank</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Put Your Head On My Shoulder (Album Version)</td>\n",
       "      <td>0.026334</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>The Strength To Go On</td>\n",
       "      <td>0.025176</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Come Fly With Me (Album Version)</td>\n",
       "      <td>0.024447</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Moondance (Album Version)</td>\n",
       "      <td>0.024118</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Kotov Syndrome</td>\n",
       "      <td>0.023311</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Use Somebody</td>\n",
       "      <td>0.023104</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Lucky (Album Version)</td>\n",
       "      <td>0.022930</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Secrets</td>\n",
       "      <td>0.022889</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Clocks</td>\n",
       "      <td>0.022562</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>a974fc428825ed071281302d6976f59bfa95fe7e</td>\n",
       "      <td>Sway (Album Version)</td>\n",
       "      <td>0.022359</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    user_id  \\\n",
       "0  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "1  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "2  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "3  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "4  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "5  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "6  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "7  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "8  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "9  a974fc428825ed071281302d6976f59bfa95fe7e   \n",
       "\n",
       "                                           song     score rank  \n",
       "0  Put Your Head On My Shoulder (Album Version)  0.026334    1  \n",
       "1                         The Strength To Go On  0.025176    2  \n",
       "2              Come Fly With Me (Album Version)  0.024447    3  \n",
       "3                     Moondance (Album Version)  0.024118    4  \n",
       "4                                Kotov Syndrome  0.023311    5  \n",
       "5                                  Use Somebody  0.023104    6  \n",
       "6                         Lucky (Album Version)  0.022930    7  \n",
       "7                                       Secrets  0.022889    8  \n",
       "8                                        Clocks  0.022562    9  \n",
       "9                          Sway (Album Version)  0.022359   10  "
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#执行推荐\n",
    "is_model.recommend(user_id)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 基于矩阵分解（SVD）的推荐\n",
    "\n",
    "相似度计算的方法看起来比较简单就是实现出来，但是当数据较大的时候计算的时间消耗实在太大了，对每一个用户都需要多次遍历整个数据集来进行计算，矩阵分解的方法是当下更常使用的方法。\n",
    "\n",
    "奇异值分解(Singular Value Decomposition，SVD)是矩阵分解中一个经典方法，接下来我们的推荐就可以SVD来进行计算，奇异值分解的基本出发点跟我们之前讲的隐语义模型有些类似都是将大矩阵转换成小矩阵的组合,基本形式如下图所示："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"1.png\" style=\"width:550px;height:280px;float:left\">\n",
    "<img src=\"5.png\" style=\"width:350px;height:280px;float:left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对矩阵进行SVD分解，将得到USV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"2.png\" style=\"width:500px;height:380px;float:left\"><img src=\"3.png\" style=\"width:400px;height:200px;float:left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "重新计算 U*S*V的结果得到A2 来比较下A2和A的差异，看起来差异是有的，但是并不大，所以我们可以近似来代替"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"4.png\" style=\"width:330px;height:220px;float:left\">\n",
    "<img src=\"5.png\" style=\"width:330px;height:220px;float:left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"6.png\" style=\"width:650px;height:480px;float:left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"7.png\" style=\"width:650px;height:480px;float:left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在SVD中我们所需的数据是用户对商品的打分，但是我们现在的数据集中只有用户播放歌曲的情况并没有实际的打分值，所以我们还得自己来定义一下用户对每个歌曲的评分值。如果一个用户喜欢某个歌曲，那应该经常播放这个歌曲，相反如果不喜欢某个歌曲，那播放次数肯定就比较少了。\n",
    "用户对歌曲的打分值，定义为：用户播放该歌曲数量/该用户播放总量。代码如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:35:54.570454Z",
     "start_time": "2017-09-26T05:35:47.751153Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>title</th>\n",
       "      <th>release</th>\n",
       "      <th>artist_name</th>\n",
       "      <th>year</th>\n",
       "      <th>total_listen_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "      <td>You And Me Jesus</td>\n",
       "      <td>Tribute To Jake Hess</td>\n",
       "      <td>Jake Hess</td>\n",
       "      <td>2004</td>\n",
       "      <td>329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "      <td>Harder Better Faster Stronger</td>\n",
       "      <td>Discovery</td>\n",
       "      <td>Daft Punk</td>\n",
       "      <td>2007</td>\n",
       "      <td>329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Uprising</td>\n",
       "      <td>Muse</td>\n",
       "      <td>0</td>\n",
       "      <td>329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "      <td>Breakfast At Tiffany's</td>\n",
       "      <td>Home</td>\n",
       "      <td>Deep Blue Something</td>\n",
       "      <td>1993</td>\n",
       "      <td>329</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "      <td>Lucky (Album Version)</td>\n",
       "      <td>We Sing.  We Dance.  We Steal Things.</td>\n",
       "      <td>Jason Mraz &amp; Colbie Caillat</td>\n",
       "      <td>0</td>\n",
       "      <td>329</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82            12   \n",
       "1  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D             1   \n",
       "2  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239             1   \n",
       "3  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50             1   \n",
       "4  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36             7   \n",
       "\n",
       "                           title                                release  \\\n",
       "0               You And Me Jesus                   Tribute To Jake Hess   \n",
       "1  Harder Better Faster Stronger                              Discovery   \n",
       "2                       Uprising                               Uprising   \n",
       "3         Breakfast At Tiffany's                                   Home   \n",
       "4          Lucky (Album Version)  We Sing.  We Dance.  We Steal Things.   \n",
       "\n",
       "                   artist_name  year  total_listen_count  \n",
       "0                    Jake Hess  2004                 329  \n",
       "1                    Daft Punk  2007                 329  \n",
       "2                         Muse     0                 329  \n",
       "3          Deep Blue Something  1993                 329  \n",
       "4  Jason Mraz & Colbie Caillat     0                 329  "
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged_sum_df = triplet_dataset_sub_song_merged[['user','listen_count']].groupby('user').sum().reset_index()\n",
    "triplet_dataset_sub_song_merged_sum_df.rename(columns={'listen_count':'total_listen_count'},inplace=True)\n",
    "triplet_dataset_sub_song_merged = pd.merge(triplet_dataset_sub_song_merged,triplet_dataset_sub_song_merged_sum_df)\n",
    "triplet_dataset_sub_song_merged.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "triplet_dataset_sub_song_merged['fractional_play_count'] = triplet_dataset_sub_song_merged['listen_count']/triplet_dataset_sub_song_merged['total_listen_count']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大概是这样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:35:59.313745Z",
     "start_time": "2017-09-26T05:35:56.374249Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user</th>\n",
       "      <th>song</th>\n",
       "      <th>listen_count</th>\n",
       "      <th>fractional_play_count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOADQPP12A67020C82</td>\n",
       "      <td>12</td>\n",
       "      <td>0.036474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAFTRR12AF72A8D4D</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOANQFY12AB0183239</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOAYATB12A6701FD50</td>\n",
       "      <td>1</td>\n",
       "      <td>0.003040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>d6589314c0a9bcbca4fee0c93b14bc402363afea</td>\n",
       "      <td>SOBOAFP12A8C131F36</td>\n",
       "      <td>7</td>\n",
       "      <td>0.021277</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       user                song  listen_count  \\\n",
       "0  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOADQPP12A67020C82            12   \n",
       "1  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAFTRR12AF72A8D4D             1   \n",
       "2  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOANQFY12AB0183239             1   \n",
       "3  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOAYATB12A6701FD50             1   \n",
       "4  d6589314c0a9bcbca4fee0c93b14bc402363afea  SOBOAFP12A8C131F36             7   \n",
       "\n",
       "   fractional_play_count  \n",
       "0               0.036474  \n",
       "1               0.003040  \n",
       "2               0.003040  \n",
       "3               0.003040  \n",
       "4               0.021277  "
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "triplet_dataset_sub_song_merged[triplet_dataset_sub_song_merged.user =='d6589314c0a9bcbca4fee0c93b14bc402363afea'][['user','song','listen_count','fractional_play_count']].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:36:21.506614Z",
     "start_time": "2017-09-26T05:36:02.556438Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from scipy.sparse import coo_matrix\n",
    "\n",
    "small_set = triplet_dataset_sub_song_merged\n",
    "user_codes = small_set.user.drop_duplicates().reset_index()\n",
    "song_codes = small_set.song.drop_duplicates().reset_index()\n",
    "user_codes.rename(columns={'index':'user_index'}, inplace=True)\n",
    "song_codes.rename(columns={'index':'song_index'}, inplace=True)\n",
    "song_codes['so_index_value'] = list(song_codes.index)\n",
    "user_codes['us_index_value'] = list(user_codes.index)\n",
    "small_set = pd.merge(small_set,song_codes,how='left')\n",
    "small_set = pd.merge(small_set,user_codes,how='left')\n",
    "mat_candidate = small_set[['us_index_value','so_index_value','fractional_play_count']]\n",
    "data_array = mat_candidate.fractional_play_count.values\n",
    "row_array = mat_candidate.us_index_value.values\n",
    "col_array = mat_candidate.so_index_value.values\n",
    "\n",
    "data_sparse = coo_matrix((data_array, (row_array, col_array)),dtype=float)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:36:23.566197Z",
     "start_time": "2017-09-26T05:36:23.558192Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<99996x30000 sparse matrix of type '<class 'numpy.float64'>'\n",
       "\twith 10774558 stored elements in COOrdinate format>"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_sparse"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上面代码先根据用户进行分组，计算每个用户的总的播放总量，然后用每首歌的播放总量相处，得到每首歌的分值，最后一列特征fractional_play_count就是用户对每首歌曲的评分值。\n",
    "有了评分值之后就可以来构建矩阵了，这里有一些小问题需要处理一下，原始数据中无论是用户ID还是歌曲ID都是很长一串，这表达起来不太方便，需要重新对其制作索引。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:36:28.138686Z",
     "start_time": "2017-09-26T05:36:28.108662Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_index</th>\n",
       "      <th>user</th>\n",
       "      <th>us_index_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>27516</th>\n",
       "      <td>2981434</td>\n",
       "      <td>2a2f776cbac6df64d6cb505e7e834e01684673b6</td>\n",
       "      <td>27516</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       user_index                                      user  us_index_value\n",
       "27516     2981434  2a2f776cbac6df64d6cb505e7e834e01684673b6           27516"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_codes[user_codes.user =='2a2f776cbac6df64d6cb505e7e834e01684673b6']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用SVD方法来进行矩阵分解\n",
    "\n",
    "矩阵构造好了之后我们就要执行SVD矩阵分解了，这里还需要一些额外的工具包来帮助我们完成计算，scipy就是其中一个好帮手了，里面已经封装好了SVD计算方法。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:36:35.965832Z",
     "start_time": "2017-09-26T05:36:31.399367Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import math as mt\n",
    "from scipy.sparse.linalg import * #used for matrix multiplication\n",
    "from scipy.sparse.linalg import svds\n",
    "from scipy.sparse import csc_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:38:22.051129Z",
     "start_time": "2017-09-26T05:38:22.026115Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def compute_svd(urm, K):\n",
    "    U, s, Vt = svds(urm, K)\n",
    "\n",
    "    dim = (len(s), len(s))\n",
    "    S = np.zeros(dim, dtype=np.float32)\n",
    "    for i in range(0, len(s)):\n",
    "        S[i,i] = mt.sqrt(s[i])\n",
    "\n",
    "    U = csc_matrix(U, dtype=np.float32)\n",
    "    S = csc_matrix(S, dtype=np.float32)\n",
    "    Vt = csc_matrix(Vt, dtype=np.float32)\n",
    "    \n",
    "    return U, S, Vt\n",
    "\n",
    "def compute_estimated_matrix(urm, U, S, Vt, uTest, K, test):\n",
    "    rightTerm = S*Vt \n",
    "    max_recommendation = 250\n",
    "    estimatedRatings = np.zeros(shape=(MAX_UID, MAX_PID), dtype=np.float16)\n",
    "    recomendRatings = np.zeros(shape=(MAX_UID,max_recommendation ), dtype=np.float16)\n",
    "    for userTest in uTest:\n",
    "        prod = U[userTest, :]*rightTerm\n",
    "        estimatedRatings[userTest, :] = prod.todense()\n",
    "        recomendRatings[userTest, :] = (-estimatedRatings[userTest, :]).argsort()[:max_recommendation]\n",
    "    return recomendRatings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在执行SVD的时候需要我们额外指定一个指标K值，其含义就是我们选择前多少个特征值来做近似代表，也就是S矩阵中的数量。如果K值较大整体的计算效率会慢一些但是会更接近真实结果，这个值还需要我们自己来衡量一下。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:38:41.670740Z",
     "start_time": "2017-09-26T05:38:23.522055Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "K=50\n",
    "urm = data_sparse\n",
    "MAX_PID = urm.shape[1]\n",
    "MAX_UID = urm.shape[0]\n",
    "\n",
    "U, S, Vt = compute_svd(urm, K)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里我们选择K值等于50，其中PID表示我们最开始选择的部分歌曲，UID表示我们选择的部分用户。\n",
    "\n",
    "执行过程中，可以打印出各个矩阵的大小，这里强烈建议大家将代码复制到IDE中，打上断点一行一行的走下面，观察其中每一个变量的值，这对理解整个流程是非常有帮助的。\n",
    "\n",
    "接下来我们需要选择待测试用户了：\n",
    "\n",
    "uTest = [4,5,6,7,8,873,23]\n",
    "\n",
    "随便选择一些用户就好，这里表示用户的索引编号，接下来需要对每一个用户计算其对我们候选集中3W首歌曲的喜好程度，说白了就是估计他对这3W首歌的评分值应该等于多少，前面我们通过SVD矩阵分解已经计算所需各个小矩阵了，接下来把其还原回去就可以啦："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:38:44.738094Z",
     "start_time": "2017-09-26T05:38:44.485691Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "uTest = [4,5,6,7,8,873,23]\n",
    "\n",
    "uTest_recommended_items = compute_estimated_matrix(urm, U, S, Vt, uTest, K, True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:38:50.376825Z",
     "start_time": "2017-09-26T05:38:48.031969Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recommendation for user with user id 4\n",
      "The number 1 recommended song is Fireflies BY Charttraxx Karaoke\n",
      "The number 2 recommended song is Hey_ Soul Sister BY Train\n",
      "The number 3 recommended song is OMG BY Usher featuring will.i.am\n",
      "The number 4 recommended song is Lucky (Album Version) BY Jason Mraz & Colbie Caillat\n",
      "The number 5 recommended song is Vanilla Twilight BY Owl City\n",
      "The number 6 recommended song is Crumpshit BY Philippe Rochard\n",
      "The number 7 recommended song is Billionaire [feat. Bruno Mars]  (Explicit Album Version) BY Travie McCoy\n",
      "The number 8 recommended song is Love Story BY Taylor Swift\n",
      "The number 9 recommended song is TULENLIEKKI BY M.A. Numminen\n",
      "The number 10 recommended song is Use Somebody BY Kings Of Leon\n",
      "Recommendation for user with user id 5\n",
      "The number 1 recommended song is Sehr kosmisch BY Harmonia\n",
      "The number 2 recommended song is Ain't Misbehavin BY Sam Cooke\n",
      "The number 3 recommended song is Dog Days Are Over (Radio Edit) BY Florence + The Machine\n",
      "The number 4 recommended song is Revelry BY Kings Of Leon\n",
      "The number 5 recommended song is Undo BY Bj?rk\n",
      "The number 6 recommended song is Cosmic Love BY Florence + The Machine\n",
      "The number 7 recommended song is Home BY Edward Sharpe & The Magnetic Zeros\n",
      "The number 8 recommended song is You've Got The Love BY Florence + The Machine\n",
      "The number 9 recommended song is Bring Me To Life BY Evanescence\n",
      "The number 10 recommended song is Tighten Up BY The Black Keys\n",
      "Recommendation for user with user id 6\n",
      "The number 1 recommended song is Crumpshit BY Philippe Rochard\n",
      "The number 2 recommended song is Marry Me BY Train\n",
      "The number 3 recommended song is Hey_ Soul Sister BY Train\n",
      "The number 4 recommended song is Lucky (Album Version) BY Jason Mraz & Colbie Caillat\n",
      "The number 5 recommended song is One On One BY the bird and the bee\n",
      "The number 6 recommended song is I Never Told You BY Colbie Caillat\n",
      "The number 7 recommended song is Canada BY Five Iron Frenzy\n",
      "The number 8 recommended song is Fireflies BY Charttraxx Karaoke\n",
      "The number 9 recommended song is TULENLIEKKI BY M.A. Numminen\n",
      "The number 10 recommended song is Bring Me To Life BY Evanescence\n",
      "Recommendation for user with user id 7\n",
      "The number 1 recommended song is Behind The Sea [Live In Chicago] BY Panic At The Disco\n",
      "The number 2 recommended song is The City Is At War (Album Version) BY Cobra Starship\n",
      "The number 3 recommended song is Dead Souls BY Nine Inch Nails\n",
      "The number 4 recommended song is Una Confusion BY LU\n",
      "The number 5 recommended song is Home BY Edward Sharpe & The Magnetic Zeros\n",
      "The number 6 recommended song is Climbing Up The Walls BY Radiohead\n",
      "The number 7 recommended song is Tighten Up BY The Black Keys\n",
      "The number 8 recommended song is Tive Sim BY Cartola\n",
      "The number 9 recommended song is West One (Shine On Me) BY The Ruts\n",
      "The number 10 recommended song is Cosmic Love BY Florence + The Machine\n",
      "Recommendation for user with user id 8\n",
      "The number 1 recommended song is Undo BY Bj?rk\n",
      "The number 2 recommended song is Canada BY Five Iron Frenzy\n",
      "The number 3 recommended song is Better To Reign In Hell BY Cradle Of Filth\n",
      "The number 4 recommended song is Unite (2009 Digital Remaster) BY Beastie Boys\n",
      "The number 5 recommended song is Behind The Sea [Live In Chicago] BY Panic At The Disco\n",
      "The number 6 recommended song is Rockin' Around The Christmas Tree BY Brenda Lee\n",
      "The number 7 recommended song is Devil's Slide BY Joe Satriani\n",
      "The number 8 recommended song is Revelry BY Kings Of Leon\n",
      "The number 9 recommended song is 16 Candles BY The Crests\n",
      "The number 10 recommended song is Catch You Baby (Steve Pitron & Max Sanna Radio Edit) BY Lonnie Gordon\n",
      "Recommendation for user with user id 873\n",
      "The number 1 recommended song is The Scientist BY Coldplay\n",
      "The number 2 recommended song is Yellow BY Coldplay\n",
      "The number 3 recommended song is Clocks BY Coldplay\n",
      "The number 4 recommended song is Fix You BY Coldplay\n",
      "The number 5 recommended song is In My Place BY Coldplay\n",
      "The number 6 recommended song is Shiver BY Coldplay\n",
      "The number 7 recommended song is Speed Of Sound BY Coldplay\n",
      "The number 8 recommended song is Creep (Explicit) BY Radiohead\n",
      "The number 9 recommended song is Sparks BY Coldplay\n",
      "The number 10 recommended song is Use Somebody BY Kings Of Leon\n",
      "Recommendation for user with user id 23\n",
      "The number 1 recommended song is Garden Of Eden BY Guns N' Roses\n",
      "The number 2 recommended song is Don't Speak BY John Dahlb?ck\n",
      "The number 3 recommended song is Master Of Puppets BY Metallica\n",
      "The number 4 recommended song is TULENLIEKKI BY M.A. Numminen\n",
      "The number 5 recommended song is Bring Me To Life BY Evanescence\n",
      "The number 6 recommended song is Kryptonite BY 3 Doors Down\n",
      "The number 7 recommended song is Make Her Say BY Kid Cudi / Kanye West / Common\n",
      "The number 8 recommended song is Night Village BY Deep Forest\n",
      "The number 9 recommended song is Better To Reign In Hell BY Cradle Of Filth\n",
      "The number 10 recommended song is Xanadu BY Olivia Newton-John;Electric Light Orchestra\n"
     ]
    }
   ],
   "source": [
    "for user in uTest:\n",
    "    print(\"Recommendation for user with user id {}\". format(user))\n",
    "    rank_value = 1\n",
    "    for i in uTest_recommended_items[user,0:10]:\n",
    "        song_details = small_set[small_set.so_index_value == i].drop_duplicates('so_index_value')[['title','artist_name']]\n",
    "        print(\"The number {} recommended song is {} BY {}\".format(rank_value, list(song_details['title'])[0],list(song_details['artist_name'])[0]))\n",
    "        rank_value+=1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里对每一个用户都得到了其对应的推荐结果，并且将结果按照得分值进行排序。\n",
    "\n",
    "\n",
    "本章我们选择了音乐数据集来进行个性化推荐任务，首先对数据进行预处理和整合，选择两种方法分别完成推荐任务。在相似度计算中根据用户所听过的歌曲在候选集中选择与其最相似的歌曲，存在的问题就是计算时间消耗太多，每一个用户都需要重新计算一遍才能得出推荐结果。在SVD矩阵分解的方法中，我们首先构建评分矩阵，对其进行SVD分解，然后选择待推荐用户，还原得到其对所有歌曲的估测评分值，最后排序返回结果即可。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:37:37.485771Z",
     "start_time": "2017-09-26T05:37:37.387208Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Predictied ratings:\n"
     ]
    }
   ],
   "source": [
    "uTest = [27513]\n",
    "#Get estimated rating for test user\n",
    "print(\"Predictied ratings:\")\n",
    "uTest_recommended_items = compute_estimated_matrix(urm, U, S, Vt, uTest, K, True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2017-09-26T05:37:38.879475Z",
     "start_time": "2017-09-26T05:37:38.540521Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recommendation for user with user id 27513\n",
      "The number 1 recommended song is Master Of Puppets BY Metallica\n",
      "The number 2 recommended song is Garden Of Eden BY Guns N' Roses\n",
      "The number 3 recommended song is Bring Me To Life BY Evanescence\n",
      "The number 4 recommended song is Kryptonite BY 3 Doors Down\n",
      "The number 5 recommended song is Make Her Say BY Kid Cudi / Kanye West / Common\n",
      "The number 6 recommended song is Night Village BY Deep Forest\n",
      "The number 7 recommended song is Savior BY Rise Against\n",
      "The number 8 recommended song is Good Things BY Rich Boy / Polow Da Don / Keri Hilson\n",
      "The number 9 recommended song is Bleed It Out [Live At Milton Keynes] BY Linkin Park\n",
      "The number 10 recommended song is Uprising BY Muse\n"
     ]
    }
   ],
   "source": [
    "for user in uTest:\n",
    "    print(\"Recommendation for user with user id {}\". format(user))\n",
    "    rank_value = 1\n",
    "    for i in uTest_recommended_items[user,0:10]:\n",
    "        song_details = small_set[small_set.so_index_value == i].drop_duplicates('so_index_value')[['title','artist_name']]\n",
    "        print(\"The number {} recommended song is {} BY {}\".format(rank_value, list(song_details['title'])[0],list(song_details['artist_name'])[0]))\n",
    "        rank_value+=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "toc": {
   "nav_menu": {
    "height": "153px",
    "width": "160px"
   },
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": true,
   "toc_position": {
    "height": "691px",
    "left": "0px",
    "right": "1405px",
    "top": "106px",
    "width": "303px"
   },
   "toc_section_display": "block",
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
